Last month’s report
1. Summary
1.1 Summary table
A total of 342,756 persons have been reached by EiE activities in
2023, of which 174,124 were boys, 161,548 were girls, 84,218 were men
and 23,485 were women. Below is a summary by indicator.
Summary statistics for EIE 5Ws reporting, 28 July 2023Indicator | Partners1 | Counties | July_reached | Total_reached | Target | %Target_reached |
|---|
1. Access ECD spaces/schools | 13 | 14 | 39,702 | 184,534 | 1,201,151 | 15.36 |
2. Feeding programmes | 9 | 6 | 24,895 | 73,144 | 784,647 | 9.32 |
3. Teaching materials | 11 | 12 | 48,779 | 195,118 | 600,578 | 32.49 |
4. Safe water, personal hygiene | 6 | 5 | 0 | 27,228 | 784,647 | 3.47 |
5. Educators resilience enhancing | 19 | 14 | 6,095 | 10,954 | 6,018 | 182.02 |
6. Children resilience enhancing | 13 | 13 | 9,419 | 74,124 | 154,729 | 47.91 |
Total | 41 | 18 | 80,111 | 342,7562 | 2,146,5452 | 15.97 |
1Only implementing partners |
2Only the sum of indicators 1, 2, 5 and 6 |
1.2 By sex and age

Only Indicator 6, Children benefiting from resilience-enhancing
programming, sees a higher proportion of females reached over men.

1.3 By county
40.19% of all beneficiaries reached originate from Turkana, though it
only has 14.05% of the targeted population.

IPC data extracted from here.
2. Progress by indicator
2.1 Overall progress

2.2 Reached by indicator
2.2.1 Access to ECD spaces/schools
EiE Indicator 1, as of 28 July 2023Indicator | Partners | Counties | July_reached | Total_reached | Target | %Target_reached |
|---|
1. Access ECD spaces/schools | 13 | 14 | 39,702 | 184,534 | 1,201,151 | 15.36 |

In July 2023, 39,702 persons were reached by interventions
contributing to this indicator, of which 22,450 were boys and 17,252
were girls.

2.2.2 School feeding programmes
EiE Indicator 2, as of 28 July 2023Indicator | Partners | Counties | July_reached | Total_reached | Target | %Target_reached |
|---|
2. Feeding programmes | 9 | 6 | 24,895 | 73,144 | 784,647 | 9.32 |

In July 2023, 24,895 persons were reached by interventions
contributing to this indicator, of which 13,892 were boys and 11,003
were girls.

2.2.3 Teaching and learning materials
EiE Indicator 3, as of 28 July 2023Indicator | Partners | Counties | July_reached | Total_reached | Target | %Target_reached |
|---|
3. Teaching materials | 11 | 12 | 48,779 | 195,118 | 600,578 | 32.49 |

In July 2023, 48,779 persons were reached by interventions
contributing to this indicator, of which 20,549 were boys, 19,739 were
girls, 6,247 were men and 2,244 were women.

2.2.4 Safe water, personal hygiene
EiE Indicator 4, as of 28 July 2023Indicator | Partners | Counties | July_reached | Total_reached | Target | %Target_reached |
|---|
4. Safe water, personal hygiene | 6 | 5 | 0 | 27,228 | 784,647 | 3.47 |

In July 2023, 0 persons were reached by interventions contributing to
this indicator, of which 0 were boys and 0 and were girls.

2.2.5 Educators trained in resilience enhancing programmes
EiE Indicator 5, as of 28 July 2023Indicator | Partners | Counties | July_reached | Total_reached | Target | %Target_reached |
|---|
5. Educators resilience enhancing | 19 | 14 | 6,095 | 10,954 | 6,018 | 182.02 |

In July 2023, 6,095 persons were reached by interventions
contributing to this indicator, of which 411 were men and 266 and were
women.

2.2.6 Children benefited from resilience enhancing programmes
EiE Indicator 6, as of 28 July 2023Indicator | Partners | Counties | July_reached | Total_reached | Target | %Target_reached |
|---|
6. Children resilience enhancing | 13 | 13 | 9,419 | 74,124 | 154,729 | 47.91 |

In July 2023, 9,419 persons were reached by interventions
contributing to this indicator, of which 4,610 were boys and 4,693 and
were girls

3. Partners
3.1 Operational presence of implementing partners
Below is an interactive table which adds detail to the map above,
serving additional information for coordination – allowing interested
parties to search by county or partner.
The column #Activities refers to the number of Education
activities implemented by said partner in each county. Each column can
be sorted with the arrows next to each column name. Each column can also
be filtered by typing into the search bar below each column name. Only
completed activities have been included.
Download the dataset from the table below here.
3.2 Summary by implementing partner
The table below breaks down persons reached by partner.
Summary by implementing partnerimplementing_partner | reached1 | counties | activities | %total2 |
|---|
Finn Church Aid | 297,589 | 5 | 6 | 52.66 |
Norwegian Refugee Council | 52,914 | 2 | 3 | 9.36 |
World Vision Kenya | 32,353 | 6 | 6 | 5.73 |
Women Educational Researchers of Kenya | 29,226 | 5 | 2 | 5.17 |
Save the Children | 22,205 | 4 | 3 | 3.93 |
We World | 20,947 | 2 | 1 | 3.71 |
Lifeskills Promoters | 19,650 | 2 | 3 | 3.48 |
Food for the Hungry | 17,974 | 2 | 4 | 3.18 |
Jesuit Refugee Service | 14,854 | 1 | 1 | 2.63 |
Homa Bay County | 14,040 | 1 | 1 | 2.48 |
AVSI Foundation | 9,768 | 2 | 3 | 1.73 |
Ministry of Education | 8,241 | 1 | 2 | 1.46 |
Edukans and SHERP Samburu | 4,734 | 1 | 1 | 0.84 |
Action for Sustainable Change | 4,160 | 1 | 3 | 0.74 |
Nawiri Children Development Program | 3,487 | 1 | 2 | 0.62 |
Mondi | 2,197 | 1 | 1 | 0.39 |
| 1,996 | 4 | 3 | 0.35 |
Special Olympics Kenya | 1,882 | 3 | 2 | 0.33 |
Qatar Charity | 1,541 | 1 | 1 | 0.27 |
The Girl Child Network | 1,050 | 2 | 1 | 0.19 |
Bartabwa | 849 | 1 | 1 | 0.15 |
County Director of Education Mandera | 600 | 1 | 1 | 0.11 |
Frontiers Community Development Program | 491 | 1 | 1 | 0.09 |
ESM | 435 | 1 | 3 | 0.08 |
County Director of Education Wajir | 361 | 1 | 1 | 0.06 |
ERIKs Development Partner | 249 | 1 | 1 | 0.04 |
Servants of the Poor | 202 | 1 | 1 | 0.04 |
Windle International Kenya | 196 | 1 | 1 | 0.03 |
CDE Marsabit | 186 | 1 | 1 | 0.03 |
Dignitas | 135 | 1 | 1 | 0.02 |
SMB | 135 | 1 | 1 | 0.02 |
FH Kenya | 111 | 1 | 1 | 0.02 |
Missionary Sisters of the Catechism | 85 | 1 | 1 | 0.02 |
Women Education Researchers of Kenya | 84 | 2 | 1 | 0.01 |
MOE/TSC | 60 | 1 | 1 | 0.01 |
Voluntary Service Overseas | 42 | 1 | 1 | 0.01 |
Futebol da Forcaa | 40 | 1 | 1 | 0.01 |
Evangelizing Sisters of Mary | 23 | 1 | 1 | 0.00 |
IWS | 10 | 1 | 2 | 0.00 |
1All indicators as opposed only indicators 1, 2, 5 and 6 |
2Percentage of reached for all indicators |
4. Schools and education level
4.1 Schools
The number of schools reached by school feeding programmes and WASH
in schools interventions to-date are:

However, reporting the overall number of schools reached by all EiE
interventions is much more challenging.
Whilst all partners working on indicators 2 and 4 submitted the
number of schools they were working in, the same is not true for the
other indicators. Only indicators 2 and 4 require the reporting of the
number of schools.
4.2 Education level
The data collected on education level is muddled: the combination of
various categories (such as ECE & Primary and
All Basic Education) hampers a clean breakdown by education
level:
Children reached by education leveleducation_level | children | %_of_total |
|---|
Primary | 318,928 | 51.93 |
ECE & Primary | 163,708 | 26.66 |
All Basic Education | 69,278 | 11.28 |
ECE | 36,716 | 5.98 |
Secondary | 25,497 | 4.15 |
Vocational | 23 | 0.00 |
Tertiary | 20 | 0.00 |
For instance, it is not possible to calculate the number of children
served from primary-level institutions.
To understand reporting around the mismatch of education-level
categories, let us examine individual indicators. In the plot below,
children reached have been broken down by education level and by
indicator. The category All Basic Education, whilst present
in all of the indicators, is most heavily used in the WASH-in-schools
intervention. Additionally, this indicator is used by 5 different
implementing partners.

5. Reference maps and tables
5.1 Reference maps
IPC data extracted from here.

5.2 Reference table
Download the EiE 5Ws data here
As a refresher for the reference table below, the indicators are:
indicator |
|---|
indicator 1 # of children and youth accessing ECD spaces/schools in drought affected areas |
indicator 2 # of schools/ECD spaces with feeding programmes |
indicator 3 # of learners and teachers reached with learning and teaching materials |
indicator 4 # of schools with adequate quantites of safe water for drinking and personal hygiene |
indicator 5 # of teachers / educators trained on resilience enhancing programmes (MHPSS, DRR & Life Skills, etc) |
indicator 6 # of children and youth benefiting from resilience enhancing programmes (MHPSS, DRR & Life Skills, etc) |
5.3 Reporting quality
5.3.1 Sub-counties
For several entries, there is more than one sub-county per rowCounty | Sub_county | Total_reached |
|---|
Baringo | Marigat, Tiaty West | 351 |
Garissa | Dadaab | 356 |
Garissa | Dadaab | 1,558 |
Wajir | Habasweine, Bute, Eldas, Sabuli, Buna, Korondile | 190 |
Tana River | Tana River, Tana North, Bangal | 557 |
Tana River | Tana River, Tana North, Bangal | 3,769 |
With reference to the extract from the 5Ws above, analysis and
reporting is at the sub-county level for the 86% of beneficiaries who
were reported without this type of error. However, until this issue is
resolved, making any sub-county-level maps or products will necessarily
exclude a sizeable portion of the beneficiaries reached.
86% of beneficiaries reported with one sub-county per rowOne_sub_county | Total_reached | %_Total |
|---|
TRUE | 410,171 | 85.53 |
FALSE | 62,673 | 13.07 |
NA | 6,744 | 1.41 |
In the proposed revision to the 5W template, the sub-county column
has been revised to be a dropdown list dependent on the input in the
county column. Going forward, only one sub-county should be
reported per row.
5.3.2 Schools
The next step is to move from entering the names of schools to just
entering the number of schools per intervention. The
schools_text column below is data entered into 5Ws
template. The column is currently a mix of names of schools and number
of schools. It is best to collect only the number of schools and have
the names be included in the comments.
Schools column is a mix of text and numbersSchools_text | Schools_number |
|---|
Eldas pry, Dela pry, Elnur pry, Habasweine pry and Tosorie pry | 5 |
23 | 23 |
Lailangi, Laaria, Mumui, Rei and Victor Besone Pri Sch | 5 |
It is still valuable to collect school names and match them to the
list of school codes and geocoordinates, especially for site-level
monitoring, but that is a step to be taken once the format of school
names being collected has been standardised.
5.3.3 Education level
As reported in an earlier section of the document, it is currently
not possible to have a clean breakdown of beneficiaries reached by
education level:
Children reached by education leveleducation_level | children | %_of_total |
|---|
Primary | 318,928 | 51.93 |
ECE & Primary | 163,708 | 26.66 |
All Basic Education | 69,278 | 11.28 |
ECE | 36,716 | 5.98 |
Secondary | 25,497 | 4.15 |
Vocational | 23 | 0.00 |
Tertiary | 20 | 0.00 |
In the updated template, the options All Basic Education
and Primary/ECE have been removed and partners are
requested to only select one education level per row.
LS0tDQp0aXRsZTogIktlbnlhIEVkdWNhdGlvbiBpbiBFbWVyZ2VuY2llcyBXb3JraW5nIEdyb3VwIC0tIERyb3VnaHQgSnVseSA1V3MgUmVwb3J0Ig0KZGF0ZTogICJgciBmb3JtYXQoU3lzLnRpbWUoKSwgJyVkICVCLCAlWScpYCINCm91dHB1dDoNCiAgaHRtbF9kb2N1bWVudDoNCiAgICBjb2RlX2Rvd25sb2FkOiB5ZXMNCiAgICB0aGVtZTogcmVhZGFibGUNCiAgICB0b2M6IHllcw0KICAgIHRvY19kZXB0aDogNA0KICAgIHRvY19mbG9hdDogeWVzDQogICAgbnVtYmVyX3NlY3Rpb25zOiBubw0KICAgIGNvbGxhcHNlZDogbm8NCmFsd2F5c19hbGxvd19odG1sOiB5ZXMNCi0tLQ0KDQpgYGB7Y3NzLCBlY2hvPUZBTFNFfQ0KDQojVE9DOjpiZWZvcmUgew0KICBjb250ZW50OiAiIjsNCiAgZGlzcGxheTogYmxvY2s7DQogIGhlaWdodDogNTBweDsNCiAgbWFyZ2luOiAyZW0gMjBweCA0MHB4IDIwcHg7DQogIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2tlbnlhLWVpZS13Zy9laWVfd2dfNXdzL21haW4vZWllX3dnX2xvZ28ucG5nIik7DQogIGJhY2tncm91bmQtc2l6ZTogY29udGFpbjsNCiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIGNlbnRlcjsNCiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsNCn0NCmBgYA0KDQpgYGB7PWh0bWx9DQo8c3R5bGU+DQogICAgYm9keSAubWFpbi1jb250YWluZXIgew0KICAgICAgICBtYXgtd2lkdGg6IDEyODBweDsNCiAgICB9DQo8L3N0eWxlPg0KYGBgDQoNCg0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gRkFMU0UsIGZpZy53aWR0aD05LCBtZXNzYWdlID0gRkFMU0UsIHdhcm5pbmc9RkFMU0UpDQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkocmVhZHhsKQ0KbGlicmFyeShsdWJyaWRhdGUpDQpsaWJyYXJ5KHN0cmluZ2kpDQpsaWJyYXJ5KGphbml0b3IpDQpsaWJyYXJ5KHNjYWxlcykNCmxpYnJhcnkodmlyaWRpcykNCmxpYnJhcnkocGF0Y2h3b3JrKQ0KbGlicmFyeShEVCkNCmxpYnJhcnkoaGVyZSkNCmxpYnJhcnkoc2YpDQpsaWJyYXJ5KHBsb3RseSkNCmxpYnJhcnkoZmxleHRhYmxlKQ0KbGlicmFyeShnZ3JlcGVsKQ0KbGlicmFyeShhbnl0aW1lKQ0KbGlicmFyeSh0aWR5dGV4dCkNCmxpYnJhcnkoZ2dzZmxhYmVsKQ0KDQp0aGVtZV9zZXQodGhlbWVfbGlnaHQoKSkNCg0KIyBJbnN0YWxsYXRpb24gb2YgbWRlcHJpdiBwYWNrYWdlDQojIGluc3RhbGwgcGFja2FnZSBkZXZ0b29scyBpZiBub3QgeWV0IGluc3RhbGxlZA0KIyAgIGluc3RhbGwucGFja2FnZXMoImRldnRvb2xzIikNCg0KIyBpbnN0YWxsIGZhc3QgZnJvbSBHaXRIdWIgd2l0aG91dCB2aWduZXR0ZXMgDQojICAgZGV2dG9vbHM6Omluc3RhbGxfZ2l0aHViKCJhLWJlbmluaS9tZGVwcml2IiwgYnVpbGRfdmlnbmV0dGVzID0gRkFMU0UNCg0KIyBBbHRlcm5hdGl2ZWx5LCBmb2xsb3cgdGhlIGluc3RydWN0aW9ucyBoZXJlOiBodHRwczovL2EtYmVuaW5pLmdpdGh1Yi5pby9tZGVwcml2Lw0KDQojIGRpc2FibGluZyBzY2llbnRpZmljIG5vdGF0aW9uDQpvcHRpb25zKHNjaXBlbiA9IDEwMCkNCg0KYCVvdXQlYCA8LSBOZWdhdGUoYCVpbiVgKQ0KDQojIGZ1bmN0aW9uIGZvciB0cmFuc3Bvc2luZyBkZg0KdHJhbnNwb3NlX2RmIDwtIGZ1bmN0aW9uKGRmKSB7DQogIHRfZGYgPC0gZGF0YS50YWJsZTo6dHJhbnNwb3NlKGRmKQ0KICBjb2xuYW1lcyh0X2RmKSA8LSByb3duYW1lcyhkZikNCiAgcm93bmFtZXModF9kZikgPC0gY29sbmFtZXMoZGYpDQogIHRfZGYgPC0gdF9kZiAlPiUNCiAgICB0aWJibGU6OnJvd25hbWVzX3RvX2NvbHVtbiguZGF0YSA9IC4pICU+JQ0KICAgIHRpYmJsZTo6YXNfdGliYmxlKC4pDQogIHJldHVybih0X2RmKQ0KfQ0KDQojIHNjYWxpbmcgZnVuY3Rpb25zIA0KcmFuZ2UwMSA8LSBmdW5jdGlvbih4KXsoeC1taW4oeCkpLyhtYXgoeCktbWluKHgpKX0NCnJhbmdlX3duYSA8LSBmdW5jdGlvbih4KXsoeC1taW4oeCwgbmEucm0gPSBUUlVFKSkvKG1heCh4LCBuYS5ybSA9IFRSVUUpLW1pbih4LCBuYS5ybSA9IFRSVUUpKX0NCg0KIyBtb2RlIGZ1bmN0aW9uIA0KbW9kZSA8LSBmdW5jdGlvbih4KSB7DQogIHV4IDwtIHVuaXF1ZSh4KQ0KICB1eFt3aGljaC5tYXgodGFidWxhdGUobWF0Y2goeCwgdXgpKSldDQp9DQoNCiMgRml4aW5nIGRhdGVzDQpuYW1lX3RvX2RhdGUgPC0gZnVuY3Rpb24oeCkgew0KICBsdWJyaWRhdGU6Om1keShpZmVsc2UoeCAlaW4lIGMobW9udGgubmFtZSwgbW9udGguYWJiKSwgcGFzdGUwKHgsICIvMDEvMjAyMyIpLCB4KSkNCn0NCmBgYA0KDQoNCg0KDQpgYGB7ciBkYXRhfQ0KbG9jYXRpb25zIDwtIHJlYWRfeGxzeCgiLi9kYXRhL2tlbl9hZG1pbmJvdW5kYXJpZXNfdGFidWxhcmRhdGEueGxzeCIsIA0KICAgICAgICAgICAgICAgICAgICAgIHNoZWV0ID0gIkFETTIiKSAlPiUgDQogIGNsZWFuX25hbWVzKCkNCg0KDQpyZXBvcnRfZGF0ZSA8LSAiMjggSnVseSAyMDIzIg0KDQpyZXBvcnRfbW9udGggPC0gIkp1bHkiDQoNCnNpdHJlcF90YWJsZSA8LSByZWFkX3hsc3goIi4vZGF0YS9zaXRyZXBfcmVzdWx0c190YWJsZS54bHN4IikgJT4lIA0KICBjbGVhbl9uYW1lcygpDQoNCnRhcmdldHMgPC0gcmVhZF9jc3YoIi4vZGF0YS9laWVfdGFyZ2V0cy5jc3YiKQ0KDQpwY29kZTFfc2hhcGUgPC0gDQogIHNmOjpzdF9yZWFkKCIuL2RhdGEva2VuX2FkbV9pZWJjXzIwMTkxMDMxX3NocC9rZW5fYWRtYm5kYV9hZG0xX2llYmNfMjAxOTEwMzEuc2hwIiwgDQogICAgICAgICAgcXVpZXQgPSBUUlVFKSAlPiUgDQogIGNsZWFuX25hbWVzKCkNCg0KaXBjIDwtIHJlYWRfY3N2KCIuL2RhdGEvaXBjLmNzdiIpDQoNCnBhcnRuZXJfbGlzdF9jb3VudGllcyA8LSByZWFkX2NzdigiLi9kYXRhL3BhcnRuZXJfbGlzdF9jb3VudGllcy5jc3YiKSAlPiUgDQogIGZpbHRlcihwYXJ0bmVyX3R5cGUgPT0gImltcGxlbWVudGluZ19wYXJ0bmVyIikNCg0KZWllIDwtIHJlYWRfY3N2KCIuL2RhdGEvZWllXzV3cy5jc3YiKSAlPiUgDQogIGZpbHRlcighaXMubmEoaW5kaWNhdG9yX3Nob3J0KSkgJT4lIA0KICByZXBsYWNlX25hKGxpc3QoYm95cyA9IDAsIGdpcmxzID0gMCwgbWVuID0gMCwgd29tZW4gPSAwKSkgJT4lIA0KICAjIFRvdGFsIHJlYWNoZWQgb2YgaW5kaWNhdG9yIDEgaXMgb25seSBib3lzIGFuZCBnaXJscyANCiAgbXV0YXRlKHRvdGFsX3JlYWNoZWQgPSBpZmVsc2Uoc3RyX2RldGVjdChpbmRpY2F0b3IsICIxIiksIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3lzICsgZ2lybHMsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbF9yZWFjaGVkKSkNCmBgYA0KDQoNCg0KDQpbTGFzdCBtb250aCdzIHJlcG9ydF0ocmVwb3J0aW5nX2p1bjIwMjMuaHRtbCkgDQoNCjxicj48YnI+PGJyPg0KDQojIDEuIFN1bW1hcnkNCg0KIyMgMS4xIFN1bW1hcnkgdGFibGUNCg0KYGBge3J9DQpzdW1fc3RhdHMgPC0gZWllICU+JSAgDQogIHN1bW1hcmlzZShwYXJ0bmVycyA9IG5fZGlzdGluY3QoaW1wbGVtZW50aW5nX3BhcnRuZXIpLCANCiAgICAgICAgICAgIGNvdW50aWVzID0gbl9kaXN0aW5jdChjb3VudHkpLCANCiAgICAgICAgICAgIHJlYWNoZWQgPSBzdW0oc2VjdG9yX3JlYWNoZWQsIG5hLnJtID0gVFJVRSksIA0KICAgICAgICAgICAgbWVuID0gc3VtKG1lbltzdHJfZGV0ZWN0KGluZGljYXRvcl9zaG9ydCwgIjF8Mnw1fDYiKSAmIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2aXR5X3N0YXR1cyA9PSAiQ29tcGxldGVkIl0sIG5hLnJtID0gVFJVRSksIA0KICAgICAgICAgICAgd29tZW4gPSBzdW0od29tZW5bc3RyX2RldGVjdChpbmRpY2F0b3Jfc2hvcnQsICIxfDJ8NXw2IikgJg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpdml0eV9zdGF0dXMgPT0gIkNvbXBsZXRlZCJdLCBuYS5ybSA9IFRSVUUpLCANCiAgICAgICAgICAgIGJveXMgPSBzdW0oYm95c1tzdHJfZGV0ZWN0KGluZGljYXRvcl9zaG9ydCwgIjF8Mnw1fDYiKSAmDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpdml0eV9zdGF0dXMgPT0gIkNvbXBsZXRlZCJdLCBuYS5ybSA9IFRSVUUpLCANCiAgICAgICAgICAgIGdpcmxzID0gc3VtKGdpcmxzW3N0cl9kZXRlY3QoaW5kaWNhdG9yX3Nob3J0LCAiMXwyfDV8NiIpICYgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2aXR5X3N0YXR1cyA9PSAiQ29tcGxldGVkIl0sIG5hLnJtID0gVFJVRSksIA0KICAgICAgICAgICAgcmVhY2hlZF8xMjU2ID0gc3VtKHRvdGFsX3JlYWNoZWRbc3RyX2RldGVjdChpbmRpY2F0b3Jfc2hvcnQsICIxfDJ8NXw2IikgJiANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZpdHlfc3RhdHVzID09ICJDb21wbGV0ZWQiXSwgbmEucm0gPSBUUlVFKSwgDQogICAgICAgICAgICBsYXRlc3RfcmVhY2hlZCA9IHN1bSh0b3RhbF9yZWFjaGVkW3N0cl9kZXRlY3QoaW5kaWNhdG9yX3Nob3J0LCAiMXwyfDV8NiIpICYgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2aXR5X3N0YXR1cyA9PSAiQ29tcGxldGVkIiYgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9udGggJWluJSByZXBvcnRfbW9udGhdLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hLnJtID0gVFJVRSkpDQoNCmBgYA0KDQpBIHRvdGFsIG9mIGByIHN1bV9zdGF0cyAlPiUgcHVsbChyZWFjaGVkXzEyNTYpICU+JSBmb3JtYXQoYmlnLm1hcmsgPSAiLCIpYCBwZXJzb25zIGhhdmUgYmVlbiByZWFjaGVkIGJ5IEVpRSBhY3Rpdml0aWVzIGluIDIwMjMsIG9mIHdoaWNoIGByIHN1bV9zdGF0cyAlPiUgcHVsbChib3lzKSAlPiUgZm9ybWF0KGJpZy5tYXJrID0gIiwiKWAgd2VyZSBib3lzLCBgciBzdW1fc3RhdHMgJT4lIHB1bGwoZ2lybHMpICU+JSBmb3JtYXQoYmlnLm1hcmsgPSAiLCIpYCB3ZXJlIGdpcmxzLCBgciBzdW1fc3RhdHMgJT4lIHB1bGwobWVuKSAlPiUgZm9ybWF0KGJpZy5tYXJrID0gIiwiKWAgd2VyZSBtZW4gYW5kIGByIHN1bV9zdGF0cyAlPiUgcHVsbCh3b21lbikgJT4lIGZvcm1hdChiaWcubWFyayA9ICIsIilgIHdlcmUgd29tZW4uIEJlbG93IGlzIGEgc3VtbWFyeSBieSBpbmRpY2F0b3IuIA0KDQoNCjxicj4NCg0KDQpgYGB7cn0NCg0KDQpzdW1tYXJ5X3RhYmxlIDwtIGVpZSAlPiUgDQogIGZpbHRlcihhY3Rpdml0eV9zdGF0dXMgPT0gIkNvbXBsZXRlZCIpICU+JSANCiAgbXV0YXRlKGxhdGVzdF9yZWFjaGVkID0gaWZlbHNlKG1vbnRoICVpbiUgcmVwb3J0X21vbnRoLCB0b3RhbF9yZWFjaGVkLCBOQV9pbnRlZ2VyXykpICU+JSANCiAgZ3JvdXBfYnkoaW5kaWNhdG9yX3Nob3J0KSAlPiUgDQogIHN1bW1hcmlzZShwYXJ0bmVycyA9IG5fZGlzdGluY3QoaW1wbGVtZW50aW5nX3BhcnRuZXIpLCANCiAgICAgICAgICAgIGNvdW50aWVzID0gbl9kaXN0aW5jdChhZG0xX3Bjb2RlKSwgICANCiAgICAgICAgICAgIGxhdGVzdF9yZWFjaGVkID0gc3VtKGxhdGVzdF9yZWFjaGVkLCBuYS5ybSA9IFRSVUUpLCANCiAgICAgICAgICAgIHRvdGFsX3JlYWNoZWQgPSBzdW0odG90YWxfcmVhY2hlZCwgbmEucm0gPSBUUlVFKSkgJT4lIA0KICBhZG9ybl90b3RhbHMoInJvdyIsLCwsIGxhdGVzdF9yZWFjaGVkLCB0b3RhbF9yZWFjaGVkKSAlPiUgDQogIG11dGF0ZShwYXJ0bmVycyA9IGlmZWxzZShpbmRpY2F0b3Jfc2hvcnQgPT0gIlRvdGFsIiwgc3VtX3N0YXRzJHBhcnRuZXJzLCBwYXJ0bmVycyksIA0KICAgICAgICAgY291bnRpZXMgPSBpZmVsc2UoaW5kaWNhdG9yX3Nob3J0ID09ICJUb3RhbCIsIHN1bV9zdGF0cyRjb3VudGllcywgY291bnRpZXMpLCANCiAgICAgICAgIHRvdGFsX3JlYWNoZWQgPSBpZmVsc2UoaW5kaWNhdG9yX3Nob3J0ID09ICJUb3RhbCIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdW1fc3RhdHMkcmVhY2hlZF8xMjU2LCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxfcmVhY2hlZCksIA0KICAgICAgICAgbGF0ZXN0X3JlYWNoZWQgPSBpZmVsc2UoaW5kaWNhdG9yX3Nob3J0ID09ICJUb3RhbCIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VtX3N0YXRzJGxhdGVzdF9yZWFjaGVkLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhdGVzdF9yZWFjaGVkKSkgJT4lIA0KICBsZWZ0X2pvaW4odGFyZ2V0cyAlPiUgDQogICAgICAgICAgICAgIGZpbHRlcih0YXJnZXRfdW5pdCA9PSAicGVvcGxlIikgJT4lDQogICAgICAgICAgICAgIGdyb3VwX2J5KGluZGljYXRvcl9zaG9ydCkgJT4lDQogICAgICAgICAgICAgIHN1bW1hcmlzZSh0YXJnZXQgPSBzdW0oY291bnR5X3RhcmdldCkpLCANCiAgICAgICAgICAgIGJ5ID0gImluZGljYXRvcl9zaG9ydCIpICU+JSANCiAgbXV0YXRlKHRhcmdldCA9IGlmZWxzZShpbmRpY2F0b3Jfc2hvcnQgPT0gIlRvdGFsIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0cyAlPiUgZGlzdGluY3QoY291bnR5LCBjb3VudHlfb3ZlcmFsbF90YXJnZXQpICU+JSB7c3VtKC4kY291bnR5X292ZXJhbGxfdGFyZ2V0KX0sIA0KICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCkpICU+JSANCiAgbXV0YXRlKHBjID0gcm91bmQodG90YWxfcmVhY2hlZCAvIHRhcmdldCAqIDEwMCwgZGlnaXRzID0gMikpICU+JQ0KICBzZWxlY3QoaW5kaWNhdG9yID0gaW5kaWNhdG9yX3Nob3J0LCBwYXJ0bmVycywgY291bnRpZXMsIA0KICAgICAgICAgbGF0ZXN0X3JlYWNoZWQsIHRvdGFsX3JlYWNoZWQsIHRhcmdldCwgYCV0YXJnZXRfcmVhY2hlZGAgPSBwYykgJT4lDQogIHNlbGVjdF9hbGwofiBnc3ViKCJsYXRlc3QiLCANCiAgICAgICAgICAgICAgICAgICAgcmVwb3J0X21vbnRoLCAuKSkgJT4lDQogIHNlbGVjdF9hbGwofiBzdHJfdG9fdGl0bGUoLikpICANCg0Kc3VtbWFyeV90YWJsZSAlPiUgDQogIGZsZXh0YWJsZSgpICU+JSANCiAgdGhlbWVfemVicmEoKSAlPiUgDQogIHNldF9jYXB0aW9uKHBhc3RlMCgiU3VtbWFyeSBzdGF0aXN0aWNzIGZvciBFSUUgNVdzIHJlcG9ydGluZywgIiwgcmVwb3J0X2RhdGUpKSAlPiUgDQogIHNldF90YWJsZV9wcm9wZXJ0aWVzKGxheW91dCA9ICJhdXRvZml0Iiwgd2lkdGggPSAuOTkpICU+JSANCiAgZm9udHNpemUoaSA9IDE6NiwgaiA9IDEsIHNpemUgPSA5KSAlPiUgDQogIGZvbnRzaXplKHNpemUgPSA5LCBwYXJ0ID0gImhlYWRlciIpICU+JSANCiAgZm9vdG5vdGUoaSA9IDEsIGogPSAyLCBwYXJ0ID0gImhlYWRlciIsIHJlZl9zeW1ib2xzID0gIjEiLCANCiAgICAgICAgICAgYXNfcGFyYWdyYXBoKCJPbmx5IGltcGxlbWVudGluZyBwYXJ0bmVycyIpKSAlPiUgDQogIGZvb3Rub3RlKGkgPSA3LCBqID0gNTo2LCByZWZfc3ltYm9scyA9ICIyIiwgDQogICAgICAgICAgIGFzX3BhcmFncmFwaCgiT25seSB0aGUgc3VtIG9mIGluZGljYXRvcnMgMSwgMiwgNSBhbmQgNiIpKQ0KDQogIA0KYGBgDQoNCjxicj48YnI+PGJyPg0KDQojIyAxLjIgQnkgc2V4IGFuZCBhZ2UNCg0KDQpgYGB7cn0NCmVpZSAlPiUgDQogIG11dGF0ZShpbmRpY2F0b3Jfc2hvcnQgPSBmY3RfcmV2KGluZGljYXRvcl9zaG9ydCkpICU+JQ0KICBtdXRhdGVfYXQodmFycyhib3lzLCBnaXJscywgbWVuLCB3b21lbiksIH4gcmVwbGFjZV9uYSguLCAwKSkgJT4lIA0KICBtdXRhdGVfYXQodmFycyhtZW4sIHdvbWVuKSwgfiBpZmVsc2Uoc3RyX2RldGVjdChpbmRpY2F0b3IsICIxIiksIDAsIC4pKSAlPiUgDQogIGdyb3VwX2J5KGluZGljYXRvcl9zaG9ydCkgJT4lIA0KICBzdW1tYXJpc2VfYXQodmFycyhib3lzLCBnaXJscywgbWVuLCB3b21lbiksIH4gc3VtKC4sIG5hLnJtID0gVFJVRSkpICU+JSANCiAgbXV0YXRlKHRvdGFsX3JlYWNoZWQgPSBib3lzICsgZ2lybHMgKyBtZW4gKyB3b21lbiwgDQogICAgICAgICBmZW1hbGUgPSAod29tZW4gKyBnaXJscykgLyB0b3RhbF9yZWFjaGVkLCANCiAgICAgICAgIG1hbGUgPSAoYm95cyArIG1lbikgLyB0b3RhbF9yZWFjaGVkKSAlPiUNCiAgcGl2b3RfbG9uZ2VyKGNvbHMgPSBjKGZlbWFsZSwgbWFsZSksIA0KICAgICAgICAgICAgICAgbmFtZXNfdG8gPSAic2V4IiwgDQogICAgICAgICAgICAgICB2YWx1ZXNfdG8gPSAicGMiKSAlPiUgDQogIGdncGxvdChhZXMoeCA9IHBjLCB5ID0gaW5kaWNhdG9yX3Nob3J0LCBmaWxsID0gc2V4KSkgKyANCiAgZ2VvbV9jb2woKSArIA0KICBnZW9tX3RleHQoYWVzKHggPSBwYywgDQogICAgICAgICAgICAgICAgeSA9IGluZGljYXRvcl9zaG9ydCwgDQogICAgICAgICAgICAgICAgbGFiZWwgPSBwZXJjZW50KHBjLCBhY2N1cmFjeSA9IDEpKSwNCiAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fc3RhY2sodmp1c3QgPSAuNSksIA0KICAgICAgICAgICAgY29sb3VyID0gIndoaXRlIikgKw0KICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKCIjNDQzOTgzIiwgIiMzNWI3NzkiKSkgKw0KICBzY2FsZV94X2NvbnRpbnVvdXMobGFiZWxzID0gcGVyY2VudCkgKyANCiAgbGFicyh4ID0gIiIsIA0KICAgICAgIHkgPSAiIiwgDQogICAgICAgdGl0bGUgPSAiU2V4IGJyZWFrZG93biBieSBpbmRpY2F0b3IiKSAgDQoNCmBgYA0KDQo8YnI+DQoNCk9ubHkgSW5kaWNhdG9yIDYsIENoaWxkcmVuIGJlbmVmaXRpbmcgZnJvbSByZXNpbGllbmNlLWVuaGFuY2luZyBwcm9ncmFtbWluZywgc2VlcyBhIGhpZ2hlciBwcm9wb3J0aW9uIG9mIGZlbWFsZXMgcmVhY2hlZCBvdmVyIG1lbi4gDQoNCjxicj4NCg0KYGBge3IgZmlnLmhlaWdodD02fQ0KZWllICU+JSANCiAgZmlsdGVyKGFjdGl2aXR5X3N0YXR1cyA9PSAiQ29tcGxldGVkIikgJT4lIA0KICBtdXRhdGVfYXQodmFycyhib3lzLCBnaXJscywgbWVuLCB3b21lbiksIH4gcmVwbGFjZV9uYSguLCAwKSkgJT4lDQogIGdyb3VwX2J5KGluZGljYXRvcl9zaG9ydCkgJT4lIA0KICBzdW1tYXJpc2VfYXQodmFycyhtZW4sIHdvbWVuLCBib3lzLCBnaXJscyksIH4gc3VtKC4pKSAlPiUgDQogIGZpbHRlcighaXMubmEoaW5kaWNhdG9yX3Nob3J0KSkgJT4lIA0KICBwaXZvdF9sb25nZXIoY29scyA9IGMobWVuLCB3b21lbiwgYm95cywgZ2lybHMpLCANCiAgICAgICAgICAgICAgIG5hbWVzX3RvID0gInR5cGUiLCANCiAgICAgICAgICAgICAgIHZhbHVlc190byA9ICJyZWFjaGVkIikgJT4lIA0KICBtdXRhdGUodHlwZSA9IHN0cl90b190aXRsZSh0eXBlKSwgDQogICAgICAgICB0eXBlID0gZmN0X3JlbGV2ZWwodHlwZSwgYygiTWVuIiwgIldvbWVuIiwgIkJveXMiLCAiR2lybHMiKSkpICU+JSANCiAgIyBZb3UncmUganVzdCBmaWx0ZXJpbmcgdGhlbSBvdXQgbWFudWFsbHkNCiAgbXV0YXRlKHJlYWNoZWQgPSBjYXNlX3doZW4oDQogICAgc3RyX2RldGVjdChpbmRpY2F0b3Jfc2hvcnQsICI1IikgJiB0eXBlID09ICJCb3lzIiB+IDAsIA0KICAgIHN0cl9kZXRlY3QoaW5kaWNhdG9yX3Nob3J0LCAiNSIpICYgdHlwZSA9PSAiR2lybHMiIH4gMCwgDQogICAgc3RyX2RldGVjdChpbmRpY2F0b3Jfc2hvcnQsICI2IikgJiB0eXBlID09ICJNZW4iIH4gMCwgDQogICAgc3RyX2RldGVjdChpbmRpY2F0b3Jfc2hvcnQsICI2IikgJiB0eXBlID09ICJXb21lbiIgfiAwLCANCiAgICBzdHJfZGV0ZWN0KGluZGljYXRvcl9zaG9ydCwgIjEiKSAmIHR5cGUgPT0gIk1lbiIgfiAwLCANCiAgICBzdHJfZGV0ZWN0KGluZGljYXRvcl9zaG9ydCwgIjEiKSAmIHR5cGUgPT0gIldvbWVuIiB+IDAsDQogICAgVFJVRSB+IHJlYWNoZWQNCiAgKSkgJT4lIA0KICBnZ3Bsb3QoYWVzKHkgPSB0eXBlLCB4ID0gcmVhY2hlZCwgZmlsbCA9IHR5cGUpKSArIA0KICBnZW9tX2NvbCgpICsgDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBjb21tYShyZWFjaGVkKSksIA0KICAgICAgICAgICAgaGp1c3QgPSAiaW53YXJkIikgKw0KICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsDQogICAgICAgIHN0cmlwLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDgsIGZhY2UgPSAiYm9sZCIpLA0KICAgICAgICBzdHJpcC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAiIzIxMjEyMSIpLCANCiAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIpKSArDQogIHNjYWxlX3hfY29udGludW91cyhsYWJlbHMgPSBudW1iZXJfZm9ybWF0KHNjYWxlID0gMSAvIDEwMDAsIHN1ZmZpeCA9ICJLIikpICsNCiAgc2NhbGVfZmlsbF92aXJpZGlzX2QoYmVnaW4gPSAuMiwgZW5kID0gLjkpICsgDQogIGZhY2V0X3dyYXAofiBpbmRpY2F0b3Jfc2hvcnQsIHNjYWxlcyA9ICJmcmVlX3giKSArIA0KICBsYWJzKHggPSAiUGVyc29ucyByZWFjaGVkIiwgDQogICAgICAgeSA9ICIiLCANCiAgICAgICB0aXRsZSA9ICJSZWFjaCBkaXNhZ2dyZWdhdGVkIGJ5IHNleCwgYWdlIGFuZCBpbmRpY2F0b3IiKQ0KDQoNCmBgYA0KDQoNCg0KPGJyPjxicj48YnI+DQoNCg0KIyMgMS4zIEJ5IGNvdW50eQ0KDQpgYGB7cn0NCmN1bV9wYzwtIGVpZSAlPiUgDQogIGZpbHRlcihhY3Rpdml0eV9zdGF0dXMgPT0gIkNvbXBsZXRlZCIpICU+JSANCiAgZ3JvdXBfYnkoY291bnR5KSAlPiUgDQogIHN1bW1hcmlzZShiZW5lZmljaWFyaWVzID0gc3VtKHNlY3Rvcl9yZWFjaGVkLCBuYS5ybSA9IFRSVUUpKSAlPiUgDQogIGxlZnRfam9pbih0YXJnZXRzICU+JSANCiAgICAgICAgICAgICAgZGlzdGluY3QoY291bnR5LCB0YXJnZXQgPSBjb3VudHlfb3ZlcmFsbF90YXJnZXQpLCANCiAgICAgICAgICAgIGJ5ID0gImNvdW50eSIpICU+JSANCiAgcmVwbGFjZV9uYShsaXN0KHRhcmdldCA9IDApKSAlPiUgDQogIG11dGF0ZShwY19iZW4gPSByb3VuZChiZW5lZmljaWFyaWVzIC8gc3VtKGJlbmVmaWNpYXJpZXMpICogMTAwLCBkaWdpdHMgPSAyKSwgDQogICAgICAgICBwY190YXJnZXQgPSByb3VuZCh0YXJnZXQgLyBzdW0odGFyZ2V0KSAqIDEwMCwgZGlnaXRzID0gMikpICU+JSANCiAgYXJyYW5nZShkZXNjKGJlbmVmaWNpYXJpZXMpKSAlPiUgDQogIG11dGF0ZShjdW1fcGMgPSBjdW1zdW0ocGNfYmVuKSkNCmBgYA0KDQpgciBjdW1fcGMgJT4lIGZpbHRlcihjb3VudHkgPT0gIlR1cmthbmEiKSAlPiUgcHVsbChjdW1fcGMpYCUgb2YgYWxsIGJlbmVmaWNpYXJpZXMgcmVhY2hlZCBvcmlnaW5hdGUgZnJvbSBUdXJrYW5hLCB0aG91Z2ggaXQgb25seSBoYXMgYHIgY3VtX3BjICU+JSBmaWx0ZXIoY291bnR5ID09ICJUdXJrYW5hIikgJT4lIHB1bGwocGNfdGFyZ2V0KWAlIG9mIHRoZSB0YXJnZXRlZCBwb3B1bGF0aW9uLiANCg0KPGJyPg0KDQpgYGB7cn0NCg0KZWllICU+JSANCiAgZ3JvdXBfYnkoYWRtMV9wY29kZSwgY291bnR5KSAlPiUgDQogIHN1bW1hcmlzZShzZWN0b3JfcmVhY2hlZCA9IHN1bShzZWN0b3JfcmVhY2hlZCwgbmEucm0gPSBUUlVFKSwgDQogICAgICAgICAgICAuZ3JvdXBzID0gImRyb3AiKSAlPiUgDQogIGxlZnRfam9pbih0YXJnZXRzICU+JSANCiAgICAgICAgICAgICAgZGlzdGluY3QoY291bnR5LCB0YXJnZXQgPSBjb3VudHlfb3ZlcmFsbF90YXJnZXQpLCANCiAgICAgICAgICAgIGJ5ID0gImNvdW50eSIpICU+JSAgDQogIG11dGF0ZShjb3VudHkgPSBmY3RfcmVvcmRlcihjb3VudHksIHNlY3Rvcl9yZWFjaGVkKSkgJT4lIA0KICBmaWx0ZXIoc2VjdG9yX3JlYWNoZWQgPiAwIHwgdGFyZ2V0ID4gMCkgJT4lIA0KICBsZWZ0X2pvaW4oaXBjICU+JSANCiAgICAgICAgICAgICAgc2VsZWN0KGFkbTFfcGNvZGUsIHBlcmNlbnRfcGhhc2VfcDMpLCANCiAgICAgICAgICAgIGJ5ID0gImFkbTFfcGNvZGUiKSAlPiUgDQogIHBpdm90X2xvbmdlcihjb2xzID0gYyhzZWN0b3JfcmVhY2hlZCwgdGFyZ2V0KSwgDQogICAgICAgICAgICAgICBuYW1lc190byA9ICJ0eXBlIiwgDQogICAgICAgICAgICAgICB2YWx1ZXNfdG8gPSAidmFsdWUiKSAlPiUgDQogIG11dGF0ZSh0eXBlID0gaWZlbHNlKHR5cGUgPT0gInRhcmdldCIsICJDb3VudHkgVGFyZ2V0IiwgIlNlY3RvciBSZWFjaGVkIikpICU+JSANCiAgcmVwbGFjZV9uYShsaXN0KHZhbHVlID0gMCkpICU+JQ0KICBnZ3Bsb3QoYWVzKHggPSB2YWx1ZSwgDQogICAgICAgICAgICAgeSA9IGNvdW50eSwgDQogICAgICAgICAgICAgZmlsbCA9IHBlcmNlbnRfcGhhc2VfcDMpKSArIA0KICBnZW9tX2NvbCgpICsgDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBjb21tYSh2YWx1ZSkpLCBoanVzdCA9ICJpbndhcmQiKSArDQogIHNjYWxlX3hfY29udGludW91cyhsYWJlbHMgPSBudW1iZXJfZm9ybWF0KHNjYWxlID0gMS8xMDAwLCBzdWZmaXggPSAiSyIpKSArDQogIHNjYWxlX2ZpbGxfdmlyaWRpcyhvcHRpb24gPSAiaW5mZXJubyIsIGJlZ2luID0gLjQsICwgZGlyZWN0aW9uID0gLTEsIA0KICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gcGVyY2VudCkgKyANCiAgZmFjZXRfZ3JpZCh+IHR5cGUsIHNjYWxlcyA9ICJmcmVlX3giLCBzcGFjZSA9ICJmcmVlIikgKyANCiAgbGFicyhmaWxsID0gIiUgSVBDMysiLA0KICAgICAgIHggPSAiVGFyZ2V0L3JlYWNoZWQiLCANCiAgICAgICB5ID0gIiIsIA0KICAgICAgIGNhcHRpb24gPSAiQ29sb3VycyByZWZlciB0byAlIG9mIGNvdW50eSBwb3B1bGF0aW9uIGluIElQQyBwaGFzZSAzIG9yIGFib3ZlLiBIb21hIEJheSB3YXMgbm90IGFzc2Vzc2VkIGFzIHBhcnQgb2YgdGhlIElQQyBDbGFzc2lmaWNhdGlvbiIsIA0KICAgICAgIHRpdGxlID0gIkNvbXBhcmlzb24gYmV0d2VlbiB0YXJnZXRzIGFuZCByZWFjaGVkIikgKw0KICB0aGVtZSgjIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KHNpemUgPSA1LCBhbmdsZSA9IDYwLCBoanVzdCA9IDEsIHZqdXN0ID0gMSksIA0KICAgICAgICAjIGF4aXMudGV4dC55ID0gZWxlbWVudF90ZXh0KHNpemUgPSA1KSwgDQogICAgICAgIHN0cmlwLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDgsIGZhY2UgPSAiYm9sZCIpLA0KICAgICAgICBzdHJpcC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAiIzIxMjEyMSIpLCANCiAgICAgICAgcGxvdC5jYXB0aW9uID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gLjUpKQ0KYGBgDQoNCklQQyBkYXRhIGV4dHJhY3RlZCBmcm9tIFtoZXJlXShodHRwczovL3d3dy5pcGNpbmZvLm9yZy9pcGMtY291bnRyeS1hbmFseXNpcy9kZXRhaWxzLW1hcC9lbi9jLzExNTYyMTAvP2lzbzM9S0VOKS4NCg0KPGJyPjxicj48YnI+DQoNCg0KDQojIDIuIFByb2dyZXNzIGJ5IGluZGljYXRvcg0KDQojIyAyLjEgT3ZlcmFsbCBwcm9ncmVzcw0KDQoNCg0KYGBge3IgZmlnLmhlaWdodD02fQ0KDQpsaW5lX3ZhbHVlcyA8LSBlaWUgJT4lIA0KICBmaWx0ZXIoYWN0aXZpdHlfc3RhdHVzID09ICJDb21wbGV0ZWQiKSAlPiUgDQogIGdyb3VwX2J5KGluZGljYXRvcl9zaG9ydCkgJT4lIA0KICBzdW1tYXJpc2UoYmVuZWZpY2lhcmllcyA9IHN1bSh0b3RhbF9yZWFjaGVkLCBuYS5ybSA9IFRSVUUpKQ0KDQoNCmVpZSAlPiUgDQogIGZpbHRlcihhY3Rpdml0eV9zdGF0dXMgPT0gIkNvbXBsZXRlZCIpICU+JSANCiAgbXV0YXRlKGRhdGUgPSBuYW1lX3RvX2RhdGUobW9udGgpKSAlPiUgDQogIGdyb3VwX2J5KGRhdGUsIGluZGljYXRvcl9zaG9ydCkgJT4lIA0KICBzdW1tYXJpc2UoYmVuZWZpY2lhcmllcyA9IHN1bSh0b3RhbF9yZWFjaGVkLCBuYS5ybSA9IFRSVUUpKSAlPiUgDQogIGdyb3VwX2J5KGluZGljYXRvcl9zaG9ydCkgJT4lIA0KICBhcnJhbmdlKGRhdGUpICU+JSANCiAgbXV0YXRlKGN1bV9iZW4gPSBjdW1zdW0oYmVuZWZpY2lhcmllcykpICU+JSANCiAgYXJyYW5nZShpbmRpY2F0b3Jfc2hvcnQpICU+JSAgDQogIGdncGxvdChhZXMoeCA9IGRhdGUsIHkgPSBjdW1fYmVuLCBjb2xvdXIgPSBpbmRpY2F0b3Jfc2hvcnQpKSArIA0KICBnZW9tX3N0ZXAoc2l6ZSA9IDEpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IGNvbW1hKGJlbmVmaWNpYXJpZXMpKSwgDQogICAgICAgICAgICB4ID0gLUluZiwgeSA9IEluZiwgaGp1c3QgPSAtMC4xNSwgdmp1c3QgPSAwLjksIGRhdGEgPSBsaW5lX3ZhbHVlcykgKyANCiAgc2NhbGVfeF9kYXRlKGRhdGVfYnJlYWtzID0gIjEgbW9udGgiLCBkYXRlX2xhYmVscyA9ICIlYiIpICsgDQogIHNjYWxlX3lfY29udGludW91cyhsYWJlbHMgPSBjb21tYSkgKyANCiAgZmFjZXRfd3JhcCh+aW5kaWNhdG9yX3Nob3J0LCBzY2FsZXMgPSAiZnJlZV95IikgKyANCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLA0KICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChzaXplID0gNiwgYW5nbGUgPSA2MCwgaGp1c3QgPSAxLCB2anVzdCA9IDEpLCANCiAgICAgICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDYpLCANCiAgICAgICAgc3RyaXAudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gNiwgZmFjZSA9ICJib2xkIiksDQogICAgICAgIHN0cmlwLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICIjMjEyMTIxIiksIA0KICAgICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMikpICsgDQogIGxhYnMoeCA9ICIiLCANCiAgICAgICB5ID0gIkN1bXVsYXRpdmUgaW50ZXJ2ZW50aW9ucyIsIA0KICAgICAgIHRpdGxlID0gcGFzdGUwKCJNb250aGx5IHByb2dyZXNzIGJ5IGFjdGl2aXR5LCAiLCByZXBvcnRfZGF0ZSksDQogICAgICAgc3VidGl0bGUgPSAiSW5kaWNhdG9yIHN1YnRvdGFsIGluIHRoZSB0b3AtbGVmdCBjb3JuZXIgb2YgZWFjaCBmYWNldCIpIA0KICANCg0KDQpgYGANCg0KPGJyPjxicj48YnI+DQoNCg0KIyMgMi4yIFJlYWNoZWQgYnkgaW5kaWNhdG9yDQoNCmBgYHtyfQ0KYmVuX3Bsb3QgPC0gZnVuY3Rpb24odGJsKSB7DQogIHRibCAlPiUgDQogICAgZ3JvdXBfYnkoaW5kaWNhdG9yX3Nob3J0LCBjb3VudHkpICU+JSANCiAgICBzdW1tYXJpc2UoYmVuZWZpY2lhcmllcyA9IHN1bSh0b3RhbF9yZWFjaGVkLCBuYS5ybSA9IFRSVUUpKSAlPiUgDQogICAgZnVsbF9qb2luKHRhcmdldHMgJT4lIA0KICAgICAgICAgICAgICAgIGZpbHRlcih0YXJnZXRfdW5pdCAlaW4lIGMoInBlb3BsZSIpKSAlPiUgDQogICAgICAgICAgICAgICAgc2VsZWN0KGNvdW50eSwgaW5kaWNhdG9yX3Nob3J0LCBjb3VudHlfdGFyZ2V0KSwgDQogICAgICAgICAgICAgIGJ5ID0gYygiY291bnR5IiwgImluZGljYXRvcl9zaG9ydCIpKSAlPiUgDQogICAgcmVwbGFjZV9uYShsaXN0KGNvdW50eV90YXJnZXQgPSAwLCANCiAgICAgICAgICAgICAgICAgICAgYmVuZWZpY2lhcmllcyA9IDApKSAlPiUgDQogICAgZmlsdGVyKGJlbmVmaWNpYXJpZXMgPiAwKSAlPiUgDQogICAgbXV0YXRlKHBjID0gaWZlbHNlKGNvdW50eV90YXJnZXQgPiAwLCBiZW5lZmljaWFyaWVzIC8gY291bnR5X3RhcmdldCwgMCksIA0KICAgICAgICAgICBjb3VudHkgPSBmY3RfcmVvcmRlcihjb3VudHksIGJlbmVmaWNpYXJpZXMpKSAlPiUgIA0KICAgIGdncGxvdChhZXMoeCA9IGJlbmVmaWNpYXJpZXMsIHkgPSBjb3VudHkpKSArIA0KICAgIGdlb21fY29sKGFlcyhmaWxsID0gcGMpKSArDQogICAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IGNvbW1hKGJlbmVmaWNpYXJpZXMpLCBoanVzdCA9ICJpbndhcmQiKSwgDQogICAgICAgICAgICAgIGNvbG91ciA9ICJncmV5NDUiKSArIA0KICAgIHNjYWxlX3hfY29udGludW91cyhsYWJlbHMgPSBjb21tYSkgKw0KICAgIHNjYWxlX2ZpbGxfdmlyaWRpcyhkaXJlY3Rpb24gPSAtMSwgb3B0aW9uID0gIm1ha28iLCANCiAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gcGVyY2VudCwgYmVnaW4gPSAuMikgKyANCiAgICBsYWJzKHRpdGxlID0gIkJlbmVmaWNpYXJpZXMgcmVhY2hlZCIsIA0KICAgICAgICAgeCA9ICJCZW5lZmljaWFyaWVzIiwgDQogICAgICAgICB5ID0gIiIsIA0KICAgICAgICAgZmlsbCA9ICIlIHJlYWNoZWQiKSANCn0NCg0KcGNfcGxvdCA8LSBmdW5jdGlvbih0YmwpIHsNCiAgdGJsICU+JSANCiAgICBncm91cF9ieShpbmRpY2F0b3Jfc2hvcnQsIGNvdW50eSkgJT4lIA0KICAgIHN1bW1hcmlzZShiZW5lZmljaWFyaWVzID0gc3VtKHRvdGFsX3JlYWNoZWQsIG5hLnJtID0gVFJVRSkpICU+JSANCiAgICBmdWxsX2pvaW4odGFyZ2V0cyAlPiUgDQogICAgICAgICAgICAgICAgZmlsdGVyKHRhcmdldF91bml0ICVpbiUgYygicGVvcGxlIikpICU+JSANCiAgICAgICAgICAgICAgICBzZWxlY3QoY291bnR5LCBpbmRpY2F0b3Jfc2hvcnQsIGNvdW50eV90YXJnZXQpLCANCiAgICAgICAgICAgICAgYnkgPSBjKCJjb3VudHkiLCAiaW5kaWNhdG9yX3Nob3J0IikpICU+JSANCiAgICByZXBsYWNlX25hKGxpc3QoY291bnR5X3RhcmdldCA9IDAsIA0KICAgICAgICAgICAgICAgICAgICBiZW5lZmljaWFyaWVzID0gMCkpICU+JSANCiAgICBmaWx0ZXIoYmVuZWZpY2lhcmllcyA+IDApICU+JSANCiAgICBtdXRhdGUocGMgPSBpZmVsc2UoY291bnR5X3RhcmdldCA+IDAsIGJlbmVmaWNpYXJpZXMgLyBjb3VudHlfdGFyZ2V0LCAwKSwgDQogICAgICAgICAgIGNvdW50eSA9IGZjdF9yZW9yZGVyKGNvdW50eSwgYmVuZWZpY2lhcmllcykpICU+JSAgDQogICAgZ2dwbG90KGFlcyh4ID0gcGMsIHkgPSBjb3VudHkpKSArIA0KICAgIGdlb21fY29sKGFlcyhmaWxsID0gcGMpKSArIA0KICAgIGdlb21fdGV4dChhZXMobGFiZWwgPSBwZXJjZW50KHBjLCBhY2N1cmFjeSA9IC4xKSwgaGp1c3QgPSAiaW53YXJkIiksIA0KICAgICAgICAgICAgICBjb2xvdXIgPSAiZ3JleTQ1IikgKyANCiAgICBzY2FsZV94X2NvbnRpbnVvdXMobGFiZWxzID0gcGVyY2VudCkgKw0KICAgIHNjYWxlX2ZpbGxfdmlyaWRpcyhkaXJlY3Rpb24gPSAtMSwgb3B0aW9uID0gIm1ha28iLCANCiAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gcGVyY2VudCwgYmVnaW4gPSAuMikgKyANCiAgICBsYWJzKHRpdGxlID0gIiUgb2YgdGFyZ2V0IHJlYWNoZWQiLCANCiAgICAgICAgIHggPSAiJSByZWFjaGVkIiwgDQogICAgICAgICB5ID0gIiIsIA0KICAgICAgICAgZmlsbCA9ICIlIHJlYWNoZWQiKSArDQogICAgDQogICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKQ0KfQ0KYGBgDQoNCmBgYHtyfQ0KdGFyZ2V0c19yYW5nZSA8LSB0YXJnZXRzICU+JSANCiAgZmlsdGVyKHRhcmdldF91bml0ID09ICJwZW9wbGUiKSAlPiUgDQogIGdyb3VwX2J5KGluZGljYXRvcl9zaG9ydCwgY291bnR5KSAlPiUgDQogIHN1bW1hcmlzZSh0YXJnZXQgPSBzdW0oY291bnR5X3RhcmdldCwgbmEucm0gPSBUUlVFKSkgJT4lIA0KICBwaXZvdF93aWRlcihuYW1lc19mcm9tID0gaW5kaWNhdG9yX3Nob3J0LCB2YWx1ZXNfZnJvbSA9IHRhcmdldCkgJT4lIA0KICBzZXROYW1lcyhjKCJjb3VudHkiLCAiaW5kaWNhdG9yMSIsICJpbmRpY2F0b3IyIiwgImluZGljYXRvcjMiLCAiaW5kaWNhdG9yNCIsIA0KICAgICAgICAgICAgICJpbmRpY2F0b3I1IiwgImluZGljYXRvcjYiKSkNCg0KaW5kaWNhdG9yX21hcCA8LSBmdW5jdGlvbih0YmwsIGluZGljYXRvcl9udW1iZXIsIHBsb3Rfb3B0aW9uKSB7DQogIA0KICBwbG90X29wdGlvbiA8LSBlbnF1byhwbG90X29wdGlvbikNCiAgaW5kaWNhdG9yX251bWJlciA8LSBlbnF1byhpbmRpY2F0b3JfbnVtYmVyKQ0KICANCiAgdGJsICU+JSANCiAgICBmaWx0ZXIoc3RyX2RldGVjdChpbmRpY2F0b3Jfc2hvcnQsICEhaW5kaWNhdG9yX251bWJlcikpICU+JSANCiAgICBncm91cF9ieShpbmRpY2F0b3Jfc2hvcnQsIGNvdW50eSkgJT4lIA0KICAgIHN1bW1hcmlzZShiZW5lZmljaWFyaWVzID0gc3VtKHRvdGFsX3JlYWNoZWQsIG5hLnJtID0gVFJVRSkpICU+JSANCiAgICBmdWxsX2pvaW4odGFyZ2V0cyAlPiUgDQogICAgICAgICAgICAgICAgZmlsdGVyKHN0cl9kZXRlY3QoaW5kaWNhdG9yX3Nob3J0LCAhIWluZGljYXRvcl9udW1iZXIpKSAlPiUNCiAgICAgICAgICAgICAgICBmaWx0ZXIodGFyZ2V0X3VuaXQgJWluJSBjKCJwZW9wbGUiKSkgJT4lIA0KICAgICAgICAgICAgICAgIHNlbGVjdChjb3VudHksIGluZGljYXRvcl9zaG9ydCwgY291bnR5X3RhcmdldCksIA0KICAgICAgICAgICAgICBieSA9IGMoImNvdW50eSIsICJpbmRpY2F0b3Jfc2hvcnQiKSkgJT4lIA0KICAgIHJlcGxhY2VfbmEobGlzdChjb3VudHlfdGFyZ2V0ID0gMCwgDQogICAgICAgICAgICAgICAgICAgIGJlbmVmaWNpYXJpZXMgPSAwKSkgJT4lIA0KICAgIGZpbHRlcihiZW5lZmljaWFyaWVzID4gMCB8IGNvdW50eV90YXJnZXQgPiAwKSAgJT4lIA0KICAgIG11dGF0ZShwYyA9IGlmZWxzZShjb3VudHlfdGFyZ2V0ID4gMCwgYmVuZWZpY2lhcmllcyAvIGNvdW50eV90YXJnZXQsIDApLCANCiAgICAgICAgICAgY291bnR5ID0gZmN0X3Jlb3JkZXIoY291bnR5LCBiZW5lZmljaWFyaWVzKSkgJT4lIA0KICAgIG5hbmlhcjo6cmVwbGFjZV93aXRoX25hKGxpc3QoYmVuZWZpY2lhcmllcyA9IDApKSAlPiUgDQogICAgbGVmdF9qb2luKGxvY2F0aW9ucyAlPiUgDQogICAgICAgICAgICAgICAgZGlzdGluY3QoY291bnR5ID0gYWRtMV9lbiwgYWRtMV9wY29kZSksIA0KICAgICAgICAgICAgICBieSA9ICJjb3VudHkiKSAlPiUgDQogICAgcmlnaHRfam9pbihwY29kZTFfc2hhcGUsIGJ5ID0gYygiYWRtMV9wY29kZSIpKSAlPiUNCiAgICBzdF9hc19zZigpICU+JSANCiAgICBnZ3Bsb3QoKSArIA0KICAgIGdlb21fc2Yoc2l6ZSA9IC4wMSwgY29sb3VyID0gImdyZXk3MCIsIA0KICAgICAgICAgICAgYWVzKGZpbGwgPSAhIXBsb3Rfb3B0aW9uKSkgKyANCiAgICBnZW9tX3NmX3RleHQoYWVzKGxhYmVsID0gY29tbWEoISFwbG90X29wdGlvbikpLA0KICAgICAgICAgICAgICAgICBjb2xvdXIgPSAiZ3JleTQ1IiwNCiAgICAgICAgICAgICAgICAgc2l6ZSA9IDIuNSkgKyANCiAgICBzY2FsZV9maWxsX3ZpcmlkaXNfYyhsYWJlbHMgPSBjb21tYSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgbmEudmFsdWUgPSAiZ3JleTgwIikgKyANCiAgICB0aGVtZV92b2lkKCkgKyANCiAgICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gLjUpKQ0KICAgIA0KfQ0KDQpgYGANCg0KIyMjIDIuMi4xIEFjY2VzcyB0byBFQ0Qgc3BhY2VzL3NjaG9vbHMNCg0KPGJyPg0KDQpgYGB7cn0NCnN1bW1hcnlfdGFibGUgJT4lIA0KICBmaWx0ZXIoc3RyX2RldGVjdChJbmRpY2F0b3IsICIxIikpICU+JSANCiAgZmxleHRhYmxlKCkgJT4lIA0KICBzZXRfY2FwdGlvbihwYXN0ZTAoIkVpRSBJbmRpY2F0b3IgMSwgYXMgb2YgIiwgcmVwb3J0X2RhdGUpKSAlPiUgDQogIHNldF90YWJsZV9wcm9wZXJ0aWVzKGxheW91dCA9ICJhdXRvZml0Iiwgd2lkdGggPSAuOTkpDQoNCmBgYA0KDQo8YnI+DQoNCmBgYHtyfQ0KaW5kaWNhdG9yX21hcChlaWUsICIxIiwgY291bnR5X3RhcmdldCkgKw0KICBsYWJzKHRpdGxlID0gIlRhcmdldHMiLCANCiAgICAgICBmaWxsID0gIlRhcmdldCIpICArIA0KaW5kaWNhdG9yX21hcChlaWUsICIxIiwgYmVuZWZpY2lhcmllcykgKyANCiAgc2NhbGVfZmlsbF92aXJpZGlzKGxpbWl0cyA9IHJhbmdlKHRhcmdldHNfcmFuZ2UkaW5kaWNhdG9yMSksIA0KICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gY29tbWEsIA0KICAgICAgICAgICAgICAgICAgICAgbmEudmFsdWUgPSAiZ3JleTgwIikgKyANCiAgbGFicyh0aXRsZSA9ICJUb3RhbCByZWFjaGVkIiwgDQogICAgICAgZmlsbCA9ICJSZWFjaGVkIikgKw0KICBwbG90X2Fubm90YXRpb24odGl0bGUgPSAiMS4gQWNjZXNzIHRvIEVDRCBzcGFjZXMvc2Nob29scywgdGFyZ2V0IGFuZCByZWFjaGVkIiwgDQogICAgICAgICAgICAgICAgICBzdWJ0aXRsZSA9IHBhc3RlMCgiQXMgb2YgIiwgcmVwb3J0X2RhdGUpKSANCg0KYGBgDQoNCg0KDQo8YnI+DQoNCkluIGByIHJlcG9ydF9tb250aGAgMjAyMywgYHIgZWllICU+JSBmaWx0ZXIobW9udGggJWluJSByZXBvcnRfbW9udGggJiBzdHJfZGV0ZWN0KGluZGljYXRvcl9zaG9ydCwgIjEiKSAmIGFjdGl2aXR5X3N0YXR1cyA9PSAiQ29tcGxldGVkIikgJT4lIHtzdW0oLiR0b3RhbF9yZWFjaGVkLCBuYS5ybSA9IFRSVUUpfSAlPiUgZm9ybWF0KGJpZy5tYXJrID0gIiwiKWAgcGVyc29ucyB3ZXJlIHJlYWNoZWQgYnkgaW50ZXJ2ZW50aW9ucyBjb250cmlidXRpbmcgdG8gdGhpcyBpbmRpY2F0b3IsIG9mIHdoaWNoIGByIGVpZSAlPiUgZmlsdGVyKG1vbnRoICVpbiUgcmVwb3J0X21vbnRoICYgc3RyX2RldGVjdChpbmRpY2F0b3Jfc2hvcnQsICIxIikgJiBhY3Rpdml0eV9zdGF0dXMgPT0gIkNvbXBsZXRlZCIpICU+JSB7c3VtKC4kYm95cywgbmEucm0gPSBUUlVFKX0gJT4lIGZvcm1hdChiaWcubWFyayA9ICIsIilgIHdlcmUgYm95cyBhbmQgYHIgZWllICU+JSBmaWx0ZXIobW9udGggJWluJSByZXBvcnRfbW9udGggJiBzdHJfZGV0ZWN0KGluZGljYXRvcl9zaG9ydCwgIjEiKSAmIGFjdGl2aXR5X3N0YXR1cyA9PSAiQ29tcGxldGVkIikgJT4lIHtzdW0oLiRnaXJscywgbmEucm0gPSBUUlVFKX0gJT4lIGZvcm1hdChiaWcubWFyayA9ICIsIilgIHdlcmUgZ2lybHMuDQoNCjxicj4NCg0KYGBge3IgZmlnLmhlaWdodD02fQ0KZWllICU+JSANCiAgZmlsdGVyKHN0cl9kZXRlY3QoaW5kaWNhdG9yX3Nob3J0LCAiMSIpKSAlPiUgDQogIHBjX3Bsb3QoKSArDQoNCmVpZSAlPiUgDQogIGZpbHRlcihzdHJfZGV0ZWN0KGluZGljYXRvcl9zaG9ydCwgIjEiKSkgJT4lIA0KICBiZW5fcGxvdCgpICsNCiAgDQpwbG90X2Fubm90YXRpb24odGl0bGUgPSAiMS4gQ2hpbGRyZW4gYWNjZXNzaW5nIEVDRCBzcGFjZXMvc2Nob29scywgdGFyZ2V0IGFuZCByZWFjaGVkIiwgDQogICAgICAgICAgICAgICAgc3VidGl0bGUgPSAiQ291bnRpZXMgd2l0aG91dCB0YXJnZXRzIGhhdmUgMCUgcmVhY2hlZCIpDQoNCiANCmBgYA0KDQo8YnI+PGJyPjxicj4NCg0KIyMjIDIuMi4yIFNjaG9vbCBmZWVkaW5nIHByb2dyYW1tZXMNCg0KPGJyPg0KDQpgYGB7cn0NCnN1bW1hcnlfdGFibGUgJT4lIA0KICBmaWx0ZXIoc3RyX2RldGVjdChJbmRpY2F0b3IsICIyIikpICU+JSANCiAgZmxleHRhYmxlKCkgJT4lIA0KICBzZXRfY2FwdGlvbihwYXN0ZTAoIkVpRSBJbmRpY2F0b3IgMiwgYXMgb2YgIiwgcmVwb3J0X2RhdGUpKSAlPiUgDQogIHNldF90YWJsZV9wcm9wZXJ0aWVzKGxheW91dCA9ICJhdXRvZml0Iiwgd2lkdGggPSAuOTkpIA0KYGBgDQoNCjxicj4NCg0KYGBge3J9DQppbmRpY2F0b3JfbWFwKGVpZSwgIjIiLCBjb3VudHlfdGFyZ2V0KSArDQogIGxhYnModGl0bGUgPSAiVGFyZ2V0cyIsIA0KICAgICAgIGZpbGwgPSAiVGFyZ2V0IikgICsgDQppbmRpY2F0b3JfbWFwKGVpZSwgIjIiLCBiZW5lZmljaWFyaWVzKSArIA0KICBzY2FsZV9maWxsX3ZpcmlkaXMobGltaXRzID0gcmFuZ2UodGFyZ2V0c19yYW5nZSRpbmRpY2F0b3IyKSwgDQogICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjb21tYSwgDQogICAgICAgICAgICAgICAgICAgICBuYS52YWx1ZSA9ICJncmV5ODAiKSArIA0KICBsYWJzKHRpdGxlID0gIlRvdGFsIHJlYWNoZWQiLCANCiAgICAgICBmaWxsID0gIlJlYWNoZWQiKSArDQogIHBsb3RfYW5ub3RhdGlvbih0aXRsZSA9ICIyLiBTY2hvb2wgZmVlZGluZyBwcm9ncmFtbWVzLCB0YXJnZXQgYW5kIHJlYWNoZWQiLCANCiAgICAgICAgICAgICAgICAgIHN1YnRpdGxlID0gcGFzdGUwKCJBcyBvZiAiLCByZXBvcnRfZGF0ZSkpIA0KDQogIA0KYGBgDQoNCjxicj4NCg0KSW4gYHIgcmVwb3J0X21vbnRoYCAyMDIzLCBgciBlaWUgJT4lIGZpbHRlcihtb250aCAlaW4lIHJlcG9ydF9tb250aCAmIHN0cl9kZXRlY3QoaW5kaWNhdG9yX3Nob3J0LCAiMiIpICYgYWN0aXZpdHlfc3RhdHVzID09ICJDb21wbGV0ZWQiKSAlPiUge3N1bSguJHRvdGFsX3JlYWNoZWQsIG5hLnJtID0gVFJVRSl9ICU+JSBmb3JtYXQoYmlnLm1hcmsgPSAiLCIpYCBwZXJzb25zIHdlcmUgcmVhY2hlZCBieSBpbnRlcnZlbnRpb25zIGNvbnRyaWJ1dGluZyB0byB0aGlzIGluZGljYXRvciwgb2Ygd2hpY2ggYHIgZWllICU+JSBmaWx0ZXIobW9udGggJWluJSByZXBvcnRfbW9udGggJiBzdHJfZGV0ZWN0KGluZGljYXRvcl9zaG9ydCwgIjIiKSAmIGFjdGl2aXR5X3N0YXR1cyA9PSAiQ29tcGxldGVkIikgJT4lIHtzdW0oLiRib3lzLCBuYS5ybSA9IFRSVUUpfSAlPiUgZm9ybWF0KGJpZy5tYXJrID0gIiwiKWAgd2VyZSBib3lzIGFuZCBgciBlaWUgJT4lIGZpbHRlcihtb250aCAlaW4lIHJlcG9ydF9tb250aCAmIHN0cl9kZXRlY3QoaW5kaWNhdG9yX3Nob3J0LCAiMiIpICYgYWN0aXZpdHlfc3RhdHVzID09ICJDb21wbGV0ZWQiKSAlPiUge3N1bSguJGdpcmxzLCBuYS5ybSA9IFRSVUUpfSAlPiUgZm9ybWF0KGJpZy5tYXJrID0gIiwiKWAgd2VyZSBnaXJscy4gDQoNCjxicj4NCg0KYGBge3J9DQplaWUgJT4lIA0KICBmaWx0ZXIoc3RyX2RldGVjdChpbmRpY2F0b3Jfc2hvcnQsICIyIikpICU+JSANCiAgcGNfcGxvdCgpICsNCg0KZWllICU+JSANCiAgZmlsdGVyKHN0cl9kZXRlY3QoaW5kaWNhdG9yX3Nob3J0LCAiMiIpKSAlPiUgDQogIGJlbl9wbG90KCkgKw0KICANCnBsb3RfYW5ub3RhdGlvbih0aXRsZSA9ICIyLiBGZWVkaW5nIHByb2dyYW1tZXMiLCANCiAgICAgICAgICAgICAgICBzdWJ0aXRsZSA9ICJDb3VudGllcyB3aXRob3V0IHRhcmdldHMgaGF2ZSAwJSByZWFjaGVkIikNCg0KDQpgYGANCg0KDQo8YnI+PGJyPjxicj4NCg0KIyMjIDIuMi4zIFRlYWNoaW5nIGFuZCBsZWFybmluZyBtYXRlcmlhbHMNCg0KPGJyPg0KDQpgYGB7cn0NCnN1bW1hcnlfdGFibGUgJT4lIA0KICBmaWx0ZXIoc3RyX2RldGVjdChJbmRpY2F0b3IsICIzIikpICU+JSANCiAgZmxleHRhYmxlKCkgJT4lIA0KICBzZXRfY2FwdGlvbihwYXN0ZTAoIkVpRSBJbmRpY2F0b3IgMywgYXMgb2YgIiwgcmVwb3J0X2RhdGUpKSAlPiUgDQogIHNldF90YWJsZV9wcm9wZXJ0aWVzKGxheW91dCA9ICJhdXRvZml0Iiwgd2lkdGggPSAuOTkpIA0KYGBgDQoNCjxicj4NCg0KYGBge3J9DQppbmRpY2F0b3JfbWFwKGVpZSwgIjMiLCBjb3VudHlfdGFyZ2V0KSArDQogIGxhYnModGl0bGUgPSAiVGFyZ2V0cyIsIA0KICAgICAgIGZpbGwgPSAiVGFyZ2V0IikgICsgDQppbmRpY2F0b3JfbWFwKGVpZSwgIjMiLCBiZW5lZmljaWFyaWVzKSArIA0KICBzY2FsZV9maWxsX3ZpcmlkaXMobGltaXRzID0gcmFuZ2UodGFyZ2V0c19yYW5nZSRpbmRpY2F0b3IzKSwgDQogICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjb21tYSwgDQogICAgICAgICAgICAgICAgICAgICBuYS52YWx1ZSA9ICJncmV5ODAiKSArIA0KICBsYWJzKHRpdGxlID0gIlRvdGFsIHJlYWNoZWQiLCANCiAgICAgICBmaWxsID0gIlJlYWNoZWQiKSArDQogIHBsb3RfYW5ub3RhdGlvbih0aXRsZSA9ICIzLiBUZWFjaGluZyBhbmQgbGVhcm5pbmcgbWF0ZXJpYWxzLCB0YXJnZXQgYW5kIHJlYWNoZWQiLCANCiAgICAgICAgICAgICAgICAgIHN1YnRpdGxlID0gcGFzdGUwKCJBcyBvZiAiLCByZXBvcnRfZGF0ZSkpIA0KDQogIA0KYGBgDQoNCjxicj4NCg0KSW4gYHIgcmVwb3J0X21vbnRoYCAyMDIzLCBgciBlaWUgJT4lIGZpbHRlcihtb250aCAlaW4lIHJlcG9ydF9tb250aCAmIHN0cl9kZXRlY3QoaW5kaWNhdG9yX3Nob3J0LCAiMyIpICYgYWN0aXZpdHlfc3RhdHVzID09ICJDb21wbGV0ZWQiKSAlPiUge3N1bSguJHRvdGFsX3JlYWNoZWQsIG5hLnJtID0gVFJVRSl9ICU+JSBmb3JtYXQoYmlnLm1hcmsgPSAiLCIpYCBwZXJzb25zIHdlcmUgcmVhY2hlZCBieSBpbnRlcnZlbnRpb25zIGNvbnRyaWJ1dGluZyB0byB0aGlzIGluZGljYXRvciwgb2Ygd2hpY2ggYHIgZWllICU+JSBmaWx0ZXIobW9udGggJWluJSByZXBvcnRfbW9udGggJiBzdHJfZGV0ZWN0KGluZGljYXRvcl9zaG9ydCwgIjMiKSAmIGFjdGl2aXR5X3N0YXR1cyA9PSAiQ29tcGxldGVkIikgJT4lIHtzdW0oLiRib3lzLCBuYS5ybSA9IFRSVUUpfSAlPiUgZm9ybWF0KGJpZy5tYXJrID0gIiwiKWAgd2VyZSBib3lzLCAgYHIgZWllICU+JSBmaWx0ZXIobW9udGggJWluJSByZXBvcnRfbW9udGggJiBzdHJfZGV0ZWN0KGluZGljYXRvcl9zaG9ydCwgIjMiKSAmIGFjdGl2aXR5X3N0YXR1cyA9PSAiQ29tcGxldGVkIikgJT4lIHtzdW0oLiRnaXJscywgbmEucm0gPSBUUlVFKX0gJT4lIGZvcm1hdChiaWcubWFyayA9ICIsIilgIHdlcmUgZ2lybHMsIGByIGVpZSAlPiUgZmlsdGVyKG1vbnRoICVpbiUgcmVwb3J0X21vbnRoICYgc3RyX2RldGVjdChpbmRpY2F0b3Jfc2hvcnQsICIzIikgJiBhY3Rpdml0eV9zdGF0dXMgPT0gIkNvbXBsZXRlZCIpICU+JSB7c3VtKC4kbWVuLCBuYS5ybSA9IFRSVUUpfSAlPiUgZm9ybWF0KGJpZy5tYXJrID0gIiwiKWAgd2VyZSBtZW4gYW5kIGByIGVpZSAlPiUgZmlsdGVyKG1vbnRoICVpbiUgcmVwb3J0X21vbnRoICYgc3RyX2RldGVjdChpbmRpY2F0b3Jfc2hvcnQsICIzIikgJiBhY3Rpdml0eV9zdGF0dXMgPT0gIkNvbXBsZXRlZCIpICU+JSB7c3VtKC4kd29tZW4sIG5hLnJtID0gVFJVRSl9ICU+JSBmb3JtYXQoYmlnLm1hcmsgPSAiLCIpYCB3ZXJlIHdvbWVuLiANCg0KPGJyPg0KDQpgYGB7cn0NCmVpZSAlPiUgDQogIGZpbHRlcihzdHJfZGV0ZWN0KGluZGljYXRvcl9zaG9ydCwgIjMiKSkgJT4lIA0KICBwY19wbG90KCkgKw0KDQplaWUgJT4lIA0KICBmaWx0ZXIoc3RyX2RldGVjdChpbmRpY2F0b3Jfc2hvcnQsICIzIikpICU+JSANCiAgYmVuX3Bsb3QoKSArDQogIA0KcGxvdF9hbm5vdGF0aW9uKHRpdGxlID0gIjMuIFRlYWNoaW5nIG1hdGVyaWFscyIsIA0KICAgICAgICAgICAgICAgIHN1YnRpdGxlID0gIkNvdW50aWVzIHdpdGhvdXQgdGFyZ2V0cyBoYXZlIDAlIHJlYWNoZWQiKQ0KDQoNCmBgYA0KDQo8YnI+PGJyPjxicj4NCg0KIyMjIDIuMi40IFNhZmUgd2F0ZXIsIHBlcnNvbmFsIGh5Z2llbmUNCg0KPGJyPg0KDQpgYGB7cn0NCnN1bW1hcnlfdGFibGUgJT4lIA0KICBmaWx0ZXIoc3RyX2RldGVjdChJbmRpY2F0b3IsICI0IikpICU+JSANCiAgZmxleHRhYmxlKCkgJT4lIA0KICBzZXRfY2FwdGlvbihwYXN0ZTAoIkVpRSBJbmRpY2F0b3IgNCwgYXMgb2YgIiwgcmVwb3J0X2RhdGUpKSAlPiUgDQogIHNldF90YWJsZV9wcm9wZXJ0aWVzKGxheW91dCA9ICJhdXRvZml0Iiwgd2lkdGggPSAuOTkpIA0KYGBgDQoNCjxicj4NCg0KYGBge3J9DQppbmRpY2F0b3JfbWFwKGVpZSwgIjQiLCBjb3VudHlfdGFyZ2V0KSArDQogIGxhYnModGl0bGUgPSAiVGFyZ2V0cyIsIA0KICAgICAgIGZpbGwgPSAiVGFyZ2V0IikgICsgDQppbmRpY2F0b3JfbWFwKGVpZSwgIjQiLCBiZW5lZmljaWFyaWVzKSArIA0KICBzY2FsZV9maWxsX3ZpcmlkaXMobGltaXRzID0gcmFuZ2UodGFyZ2V0c19yYW5nZSRpbmRpY2F0b3I0KSwgDQogICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjb21tYSwgDQogICAgICAgICAgICAgICAgICAgICBuYS52YWx1ZSA9ICJncmV5ODAiKSArIA0KICBsYWJzKHRpdGxlID0gIlRvdGFsIHJlYWNoZWQiLCANCiAgICAgICBmaWxsID0gIlJlYWNoZWQiKSArDQogIHBsb3RfYW5ub3RhdGlvbih0aXRsZSA9ICI0LiBTYWZlIHdhdGVyLCBwZXJzb25hbCBoeWdpZW5lLCB0YXJnZXQgYW5kIHJlYWNoZWQiLCANCiAgICAgICAgICAgICAgICAgIHN1YnRpdGxlID0gcGFzdGUwKCJBcyBvZiAiLCByZXBvcnRfZGF0ZSkpIA0KDQogIA0KYGBgDQoNCjxicj4NCg0KSW4gYHIgcmVwb3J0X21vbnRoYCAyMDIzLCBgciBlaWUgJT4lIGZpbHRlcihtb250aCAlaW4lIHJlcG9ydF9tb250aCAmIHN0cl9kZXRlY3QoaW5kaWNhdG9yX3Nob3J0LCAiNCIpICYgYWN0aXZpdHlfc3RhdHVzID09ICJDb21wbGV0ZWQiKSAlPiUge3N1bSguJHRvdGFsX3JlYWNoZWQsIG5hLnJtID0gVFJVRSl9ICU+JSBmb3JtYXQoYmlnLm1hcmsgPSAiLCIpYCBwZXJzb25zIHdlcmUgcmVhY2hlZCBieSBpbnRlcnZlbnRpb25zIGNvbnRyaWJ1dGluZyB0byB0aGlzIGluZGljYXRvciwgb2Ygd2hpY2ggYHIgZWllICU+JSBmaWx0ZXIobW9udGggJWluJSByZXBvcnRfbW9udGggJiBzdHJfZGV0ZWN0KGluZGljYXRvcl9zaG9ydCwgIjQiKSAmIGFjdGl2aXR5X3N0YXR1cyA9PSAiQ29tcGxldGVkIikgJT4lIHtzdW0oLiRib3lzLCBuYS5ybSA9IFRSVUUpfSAlPiUgZm9ybWF0KGJpZy5tYXJrID0gIiwiKWAgd2VyZSBib3lzIGFuZCBgciBlaWUgJT4lIGZpbHRlcihtb250aCAlaW4lIHJlcG9ydF9tb250aCAmIHN0cl9kZXRlY3QoaW5kaWNhdG9yX3Nob3J0LCAiNCIpICYgYWN0aXZpdHlfc3RhdHVzID09ICJDb21wbGV0ZWQiKSAlPiUge3N1bSguJGdpcmxzLCBuYS5ybSA9IFRSVUUpfSAlPiUgZm9ybWF0KGJpZy5tYXJrID0gIiwiKWAgYW5kIHdlcmUgZ2lybHMuIA0KDQo8YnI+DQoNCmBgYHtyfQ0KZWllICU+JSANCiAgZmlsdGVyKHN0cl9kZXRlY3QoaW5kaWNhdG9yX3Nob3J0LCAiNCIpKSAlPiUgDQogIHBjX3Bsb3QoKSArDQoNCmVpZSAlPiUNCiAgZmlsdGVyKHN0cl9kZXRlY3QoaW5kaWNhdG9yX3Nob3J0LCAiNCIpKSAlPiUgDQogIGJlbl9wbG90KCkgKw0KICANCnBsb3RfYW5ub3RhdGlvbih0aXRsZSA9ICI0LiBTYWZlIHdhdGVyLCBwZXJzb25hbCBoeWdpZW5lIiwgDQogICAgICAgICAgICAgICAgc3VidGl0bGUgPSAiQ291bnRpZXMgd2l0aG91dCAlIHJlYWNoZWQgaGF2ZSBubyB0YXJnZXQiKQ0KDQpgYGANCg0KPGJyPjxicj48YnI+DQoNCiMjIyAyLjIuNSBFZHVjYXRvcnMgdHJhaW5lZCBpbiByZXNpbGllbmNlIGVuaGFuY2luZyBwcm9ncmFtbWVzDQoNCjxicj4NCg0KYGBge3J9DQpzdW1tYXJ5X3RhYmxlICU+JSANCiAgZmlsdGVyKHN0cl9kZXRlY3QoSW5kaWNhdG9yLCAiNSIpKSAlPiUgDQogIGZsZXh0YWJsZSgpICU+JSANCiAgc2V0X2NhcHRpb24ocGFzdGUwKCJFaUUgSW5kaWNhdG9yIDUsIGFzIG9mICIsIHJlcG9ydF9kYXRlKSkgJT4lIA0KICBzZXRfdGFibGVfcHJvcGVydGllcyhsYXlvdXQgPSAiYXV0b2ZpdCIsIHdpZHRoID0gLjk5KSANCmBgYA0KDQo8YnI+DQoNCmBgYHtyfQ0KaW5kaWNhdG9yX21hcChlaWUsICI1IiwgY291bnR5X3RhcmdldCkgKw0KICBzY2FsZV9maWxsX3ZpcmlkaXNfYyhuYS52YWx1ZSA9ICJncmV5ODAiLCBsaW1pdHMgPSByYW5nZShjKDAsIDE4MTMpKSkgKyANCiAgbGFicyh0aXRsZSA9ICJUYXJnZXRzIiwgDQogICAgICAgZmlsbCA9ICJUYXJnZXQiKSAgKyANCmluZGljYXRvcl9tYXAoZWllLCAiNSIsIGJlbmVmaWNpYXJpZXMpICsgDQogIGxhYnModGl0bGUgPSAiVG90YWwgcmVhY2hlZCIsIA0KICAgICAgIGZpbGwgPSAiUmVhY2hlZCIpICsNCiAgcGxvdF9hbm5vdGF0aW9uKHRpdGxlID0gIjUuIEVkdWNhdG9ycyB0cmFpbmVkIGluIHJlc2lsaWVuY2UgZW5oYW5jaW5nIHByb2dyYW1tZXMsIHRhcmdldCBhbmQgcmVhY2hlZCIsIA0KICAgICAgICAgICAgICAgICAgc3VidGl0bGUgPSBwYXN0ZTAoIkFzIG9mICIsIHJlcG9ydF9kYXRlKSkgDQoNCmBgYA0KDQo8YnI+DQoNCkluIGByIHJlcG9ydF9tb250aGAgMjAyMywgYHIgZWllICU+JSBmaWx0ZXIobW9udGggJWluJSByZXBvcnRfbW9udGggJiBzdHJfZGV0ZWN0KGluZGljYXRvcl9zaG9ydCwgIjUiKSAmIGFjdGl2aXR5X3N0YXR1cyA9PSAiQ29tcGxldGVkIikgJT4lIHtzdW0oLiR0b3RhbF9yZWFjaGVkLCBuYS5ybSA9IFRSVUUpfSAlPiUgZm9ybWF0KGJpZy5tYXJrID0gIiwiKWAgcGVyc29ucyB3ZXJlIHJlYWNoZWQgYnkgaW50ZXJ2ZW50aW9ucyBjb250cmlidXRpbmcgdG8gdGhpcyBpbmRpY2F0b3IsIG9mIHdoaWNoIGByIGVpZSAlPiUgZmlsdGVyKG1vbnRoICVpbiUgcmVwb3J0X21vbnRoICYgc3RyX2RldGVjdChpbmRpY2F0b3Jfc2hvcnQsICI1IikgJiBhY3Rpdml0eV9zdGF0dXMgPT0gIkNvbXBsZXRlZCIpICU+JSB7c3VtKC4kbWVuLCBuYS5ybSA9IFRSVUUpfSAlPiUgZm9ybWF0KGJpZy5tYXJrID0gIiwiKWAgd2VyZSBtZW4gYW5kIGByIGVpZSAlPiUgZmlsdGVyKG1vbnRoICVpbiUgcmVwb3J0X21vbnRoICYgc3RyX2RldGVjdChpbmRpY2F0b3Jfc2hvcnQsICI1IikgJiBhY3Rpdml0eV9zdGF0dXMgPT0gIkNvbXBsZXRlZCIpICU+JSB7c3VtKC4kd29tZW4sIG5hLnJtID0gVFJVRSl9ICU+JSBmb3JtYXQoYmlnLm1hcmsgPSAiLCIpYCBhbmQgd2VyZSB3b21lbi4gDQoNCg0KPGJyPg0KDQpgYGB7cn0NCmVpZSAlPiUgDQogIGZpbHRlcihzdHJfZGV0ZWN0KGluZGljYXRvcl9zaG9ydCwgIjUiKSkgJT4lIA0KICBwY19wbG90KCkgKw0KDQplaWUgJT4lDQogIGZpbHRlcihzdHJfZGV0ZWN0KGluZGljYXRvcl9zaG9ydCwgIjUiKSkgJT4lIA0KICBiZW5fcGxvdCgpICsNCiAgDQpwbG90X2Fubm90YXRpb24odGl0bGUgPSAiNS4gRWR1Y2F0b3JzIHRyYWluZWQgaW4gcmVzaWxpZW5jZSBlbmhhbmNpbmcgcHJvZ3JhbW1lcyIsIA0KICAgICAgICAgICAgICAgIHN1YnRpdGxlID0gIkNvdW50aWVzIHdpdGhvdXQgJSByZWFjaGVkIGhhdmUgbm8gdGFyZ2V0IikNCg0KDQpgYGANCg0KPGJyPjxicj48YnI+DQoNCiMjIyAyLjIuNiBDaGlsZHJlbiBiZW5lZml0ZWQgZnJvbSByZXNpbGllbmNlIGVuaGFuY2luZyBwcm9ncmFtbWVzDQoNCjxicj4NCg0KYGBge3J9DQpzdW1tYXJ5X3RhYmxlICU+JSANCiAgZmlsdGVyKHN0cl9kZXRlY3QoSW5kaWNhdG9yLCAiNiIpKSAlPiUgDQogIGZsZXh0YWJsZSgpICU+JSANCiAgc2V0X2NhcHRpb24ocGFzdGUwKCJFaUUgSW5kaWNhdG9yIDYsIGFzIG9mICIsIHJlcG9ydF9kYXRlKSkgJT4lIA0KICBzZXRfdGFibGVfcHJvcGVydGllcyhsYXlvdXQgPSAiYXV0b2ZpdCIsIHdpZHRoID0gLjk5KSANCmBgYA0KDQo8YnI+DQoNCmBgYHtyfQ0KaW5kaWNhdG9yX21hcChlaWUsICI2IiwgY291bnR5X3RhcmdldCkgKw0KICBsYWJzKHRpdGxlID0gIlRhcmdldHMiLCANCiAgICAgICBmaWxsID0gIlRhcmdldCIpICArIA0KaW5kaWNhdG9yX21hcChlaWUsICI2IiwgYmVuZWZpY2lhcmllcykgKyANCiAgc2NhbGVfZmlsbF92aXJpZGlzKGxpbWl0cyA9IHJhbmdlKHRhcmdldHNfcmFuZ2UkaW5kaWNhdG9yNiksIA0KICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gY29tbWEsIA0KICAgICAgICAgICAgICAgICAgICAgbmEudmFsdWUgPSAiZ3JleTgwIikgKyANCiAgbGFicyh0aXRsZSA9ICJUb3RhbCByZWFjaGVkIiwgDQogICAgICAgZmlsbCA9ICJSZWFjaGVkIikgKw0KICBwbG90X2Fubm90YXRpb24odGl0bGUgPSAiNi4gQ2hpbGRyZW4gYmVuZWZpdGVkIGZyb20gcmVzaWxpZW5jZSBlbmhhbmNpbmcgcHJvZ3JhbW1lcywgdGFyZ2V0IGFuZCByZWFjaGVkIiwgDQogICAgICAgICAgICAgICAgICBzdWJ0aXRsZSA9IHBhc3RlMCgiQXMgb2YgIiwgcmVwb3J0X2RhdGUpKSANCg0KYGBgDQoNCjxicj4NCg0KSW4gYHIgcmVwb3J0X21vbnRoYCAyMDIzLCBgciBlaWUgJT4lIGZpbHRlcihtb250aCAlaW4lIHJlcG9ydF9tb250aCAmIHN0cl9kZXRlY3QoaW5kaWNhdG9yX3Nob3J0LCAiNiIpICYgYWN0aXZpdHlfc3RhdHVzID09ICJDb21wbGV0ZWQiKSAlPiUge3N1bSguJHRvdGFsX3JlYWNoZWQsIG5hLnJtID0gVFJVRSl9ICU+JSBmb3JtYXQoYmlnLm1hcmsgPSAiLCIpYCBwZXJzb25zIHdlcmUgcmVhY2hlZCBieSBpbnRlcnZlbnRpb25zIGNvbnRyaWJ1dGluZyB0byB0aGlzIGluZGljYXRvciwgb2Ygd2hpY2ggYHIgZWllICU+JSBmaWx0ZXIobW9udGggJWluJSByZXBvcnRfbW9udGggJiBzdHJfZGV0ZWN0KGluZGljYXRvcl9zaG9ydCwgIjYiKSAmIGFjdGl2aXR5X3N0YXR1cyA9PSAiQ29tcGxldGVkIikgJT4lIHtzdW0oLiRib3lzLCBuYS5ybSA9IFRSVUUpfSAlPiUgZm9ybWF0KGJpZy5tYXJrID0gIiwiKWAgd2VyZSBib3lzIGFuZCBgciBlaWUgJT4lIGZpbHRlcihtb250aCAlaW4lIHJlcG9ydF9tb250aCAmIHN0cl9kZXRlY3QoaW5kaWNhdG9yX3Nob3J0LCAiNiIpICYgYWN0aXZpdHlfc3RhdHVzID09ICJDb21wbGV0ZWQiKSAlPiUge3N1bSguJGdpcmxzLCBuYS5ybSA9IFRSVUUpfSAlPiUgZm9ybWF0KGJpZy5tYXJrID0gIiwiKWAgYW5kIHdlcmUgZ2lybHMgDQoNCg0KPGJyPg0KDQpgYGB7cn0NCmVpZSAlPiUgDQogIGZpbHRlcihzdHJfZGV0ZWN0KGluZGljYXRvcl9zaG9ydCwgIjUiKSkgJT4lIA0KICBwY19wbG90KCkgKw0KDQplaWUgJT4lDQogIGZpbHRlcihzdHJfZGV0ZWN0KGluZGljYXRvcl9zaG9ydCwgIjUiKSkgJT4lIA0KICBiZW5fcGxvdCgpICsNCiAgDQpwbG90X2Fubm90YXRpb24odGl0bGUgPSAiNi4gQ2hpbGRyZW4gYmVuZWZpdGVkIGZyb20gcmVzaWxpZW5jZSBlbmhhbmNpbmcgcHJvZ3JhbW1lcyIsIA0KICAgICAgICAgICAgICAgIHN1YnRpdGxlID0gIkNvdW50aWVzIHdpdGhvdXQgJSByZWFjaGVkIGhhdmUgbm8gdGFyZ2V0IikNCg0KDQpgYGANCg0KDQo8YnI+PGJyPjxicj4NCg0KIyAzLiBQYXJ0bmVycw0KDQojIyAzLjEgT3BlcmF0aW9uYWwgcHJlc2VuY2Ugb2YgaW1wbGVtZW50aW5nIHBhcnRuZXJzDQoNCjxicj4NCg0KDQoNCmBgYHtyIHdhcm5pbmc9RkFMU0UsIGZpZy5oZWlnaHQ9N30NCg0KcGFydG5lcl9tYXAgPC0gZWllICU+JSANCiAgbXV0YXRlX2F0KHZhcnMoYm95cywgZ2lybHMsIG1lbiwgd29tZW4pLCB+IHJlcGxhY2VfbmEoLiwgMCkpICU+JSANCiAgZ3JvdXBfYnkoYWRtMV9wY29kZSwgY291bnR5KSAlPiUgDQogIHN1bW1hcmlzZShwYXJ0bmVycyA9IG5fZGlzdGluY3QoaW1wbGVtZW50aW5nX3BhcnRuZXIpLCANCiAgICAgICAgICAgIGxlYWRfb3JnYW5pc2F0aW9uID0gbl9kaXN0aW5jdChsZWFkX29yZ2FuaXNhdGlvbiksDQogICAgICAgICAgICBhY3Rpdml0aWVzID0gbl9kaXN0aW5jdChpbmRpY2F0b3Jfc2hvcnQpLCANCiAgICAgICAgICAgIHdvbWVuID0gc3VtKHdvbWVuW2FjdGl2aXR5X3N0YXR1cyA9PSAiQ29tcGxldGVkIl0sIG5hLnJtID0gVFJVRSksDQogICAgICAgICAgICBtZW4gPSBzdW0obWVuW2FjdGl2aXR5X3N0YXR1cyA9PSAiQ29tcGxldGVkIl0sIG5hLnJtID0gVFJVRSksIA0KICAgICAgICAgICAgYm95cyA9IHN1bShib3lzW2FjdGl2aXR5X3N0YXR1cyA9PSAiQ29tcGxldGVkIl0sIG5hLnJtID0gVFJVRSksIA0KICAgICAgICAgICAgZ2lybHMgPSBzdW0oZ2lybHNbYWN0aXZpdHlfc3RhdHVzID09ICJDb21wbGV0ZWQiXSwgbmEucm0gPSBUUlVFKSwNCiAgICAgICAgICAgIHNlY3Rvcl9yZWFjaGVkID0gc3VtKHNlY3Rvcl9yZWFjaGVkW2FjdGl2aXR5X3N0YXR1cyA9PSAiQ29tcGxldGVkIl0sIG5hLnJtID0gVFJVRSksDQogICAgICAgICAgICAuZ3JvdXBzID0gImRyb3AiKSAlPiUgDQogIG11dGF0ZShyZWFjaGVkID0gbWVuICsgd29tZW4gKyBib3lzICsgZ2lybHMsIA0KICAgICAgICAgbWFsZSA9IG1lbiArIGJveXMsIA0KICAgICAgICAgZmVtYWxlID0gd29tZW4gKyBnaXJscywgDQogICAgICAgICBtYWxlX3BjID0gcm91bmQobWFsZSAvIHJlYWNoZWQgKiAxMDApLCANCiAgICAgICAgIGZlbWFsZV9wYyA9IHJvdW5kKGZlbWFsZSAvIHJlYWNoZWQgKiAxMDApKSAlPiUgIA0KICBsZWZ0X2pvaW4ocGFydG5lcl9saXN0X2NvdW50aWVzICU+JQ0KICAgICAgICAgICAgICBkaXN0aW5jdChhZG0xX3Bjb2RlLCBhY3JvbnltKSAlPiUNCiAgICAgICAgICAgICAgZ3JvdXBfYnkoYWRtMV9wY29kZSkgJT4lDQogICAgICAgICAgICAgIGFycmFuZ2UoYWNyb255bSkgJT4lIA0KICAgICAgICAgICAgICBzdW1tYXJpc2UoYWNyb255bSA9IHBhc3RlMChhY3JvbnltLCBjb2xsYXBzZSA9ICIsICIpKSAlPiUNCiAgICAgICAgICAgICAgbXV0YXRlKGFjcm9ueW0gPSBzdHJfcmVwbGFjZV9hbGwoYWNyb255bSwgIkNoaWxkRnVuZCIsICJDRiIpLCANCiAgICAgICAgICAgICAgICAgICAgIG5fcGFydG5lcnMgPSBzdHJfY291bnQoYWNyb255bSwgIiwiKSArIDEpLCANCiAgICAgICAgICAgIGJ5ID0gImFkbTFfcGNvZGUiKSAlPiUgDQogIGxlZnRfam9pbihwY29kZTFfc2hhcGUsIA0KICAgICAgICAgICAgIGJ5ID0gImFkbTFfcGNvZGUiKSAlPiUgDQogIHN0X2FzX3NmKCkgJT4lIA0KICBnZ3Bsb3QoKSArIA0KICBnZW9tX3NmKHNpemUgPSAuMDEsIGNvbG91ciA9ICJncmV5NzAiLCANCiAgICAgICAgICBkYXRhID0gcGNvZGUxX3NoYXBlKSArIA0KICBnZW9tX3NmKHNpemUgPSAuMDEsIGNvbG91ciA9ICJncmV5NzAiLCANCiAgICAgICAgICBhZXMoZmlsbCA9IHBhcnRuZXJzLCANCiAgICAgICAgICAgICAgY29sb3VyID0gYWRtMV9wY29kZSkpICsgDQogIGdlb21fc2ZfdGV4dChhZXMobGFiZWwgPSBwYXN0ZTAoIA0KICAgIGNvdW50eSwgIlxuIiwgcGFydG5lcnMpLCANCiAgICAgICAgICAgICAgICAgICB0ZXh0ID0gcGFzdGUwKA0KICAgICAgICAgICAgICAgICJDb3VudHk6ICIsIGNvdW50eSwgIlxuIiwgDQogICAgICAgICAgICAgICAgIlBhcnRuZXJzOiAiLCBuX3BhcnRuZXJzLCAiXG4iLCANCiAgICAgICAgICAgICAgICAiUmVhY2hlZDogIiwgY29tbWEoc2VjdG9yX3JlYWNoZWQpLCAiXG4iLCANCiAgICAgICAgICAgICAgICAiRmVtYWxlX3JlYWNoZWQlOiAiLCBmZW1hbGVfcGMsICIlIiwgIlxuIiwgDQogICAgICAgICAgICAgICAgIk1hbGVfcmVhY2hlZCU6ICIsIG1hbGVfcGMsICIlIiwgDQogICAgICAgICAgICAgICAgIlxuIiwgIlxuIiwgDQogICAgICAgICAgICAgICAgYWNyb255bSkpLCANCiAgICAgICAgICAgICAgICBzaXplID0gMywgY29sb3VyID0gImdyYXk0MCIpICsgDQogIHNjYWxlX2ZpbGxfdmlyaWRpc19jKG9wdGlvbiA9ICJtYWtvIiwgDQogICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSAtMSwNCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrcyA9IGMoMSwgMywgNiwgMTApKSArIA0KICANCiAgdGhlbWVfdm9pZCgpICsgDQogICMgUmVtZW1iZXIgdGhhdCB5b3UgbmVlZCBndWlkZV9jb2xvcmJhciwgbm90IGd1aWRlX2xlZ2VuZA0KICAjIGd1aWRlcyhmaWxsID0gZ3VpZGVfY29sb3JiYXIocmV2ZXJzZSA9IFRSVUUpKSArIA0KICBsYWJzKHRpdGxlID0gIktFTllBOiBFZHVjYXRpb24gaW4gRW1lcmdlbmNpZXMgV29ya2luZyBHcm91cCBvcGVyYXRpb25hbCBwcmVzZW5jZSIsIA0KICAgICAgIHN1YnRpdGxlID0gcGFzdGUwKCJhcyBvZiAiLCByZXBvcnRfZGF0ZSksIA0KICAgICAgIGZpbGwgPSAiUGFydG5lcnMiKQ0KDQoNCmdncGxvdGx5KHBhcnRuZXJfbWFwLCB0b29sdGlwID0gYygidGV4dCIpKSAlPiUgDQogIGxheW91dCh0aXRsZSA9IGxpc3QodGV4dCA9IHBhc3RlMChzdW1fc3RhdHMkcGFydG5lcnMsICIgRWlFIGltcGxlbWVudGluZyBwYXJ0bmVycyBhY3Jvc3MgIiwgc3VtX3N0YXRzJGNvdW50aWVzLCAiIGNvdW50aWVzIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8YnI+IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8c3VwPiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXMgb2YgIiwgcmVwb3J0X2RhdGUsICI7IG1vdXNlIG92ZXIgY291bnR5IG5hbWUgZm9yIG1vcmUgZGV0YWlscyIsICI8L3N1cD4iKSkpDQpgYGANCg0KDQo8YnI+DQoNCkJlbG93IGlzIGFuIGludGVyYWN0aXZlIHRhYmxlIHdoaWNoIGFkZHMgZGV0YWlsIHRvIHRoZSBtYXAgYWJvdmUsIHNlcnZpbmcgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBmb3IgY29vcmRpbmF0aW9uIC0tIGFsbG93aW5nIGludGVyZXN0ZWQgcGFydGllcyB0byBzZWFyY2ggYnkgY291bnR5IG9yIHBhcnRuZXIuIA0KDQogVGhlIGNvbHVtbiBgI0FjdGl2aXRpZXNgIHJlZmVycyB0byB0aGUgbnVtYmVyIG9mIEVkdWNhdGlvbiBhY3Rpdml0aWVzIGltcGxlbWVudGVkIGJ5IHNhaWQgcGFydG5lciBpbiBlYWNoIGNvdW50eS4gRWFjaCBjb2x1bW4gY2FuIGJlIHNvcnRlZCB3aXRoIHRoZSBhcnJvd3MgbmV4dCB0byBlYWNoIGNvbHVtbiBuYW1lLiBFYWNoIGNvbHVtbiBjYW4gYWxzbyBiZSBmaWx0ZXJlZCBieSB0eXBpbmcgaW50byB0aGUgc2VhcmNoIGJhciBiZWxvdyBlYWNoIGNvbHVtbiBuYW1lLiBPbmx5IGNvbXBsZXRlZCBhY3Rpdml0aWVzIGhhdmUgYmVlbiBpbmNsdWRlZC4NCiANCmBgYHtyfQ0KZWllICU+JQ0KICBtdXRhdGVfYXQodmFycyhpbXBsZW1lbnRpbmdfcGFydG5lciwgbGVhZF9vcmdhbmlzYXRpb24pLCB+IA0KICAgICAgICAgICAgICBzdHJfc3ViKC4sIGVuZCA9IDUwTCkpICU+JSAgDQogIGdyb3VwX2J5KGNvdW50eSwgYWRtMV9wY29kZSwgaW1wbGVtZW50aW5nX3BhcnRuZXIsIGxlYWRfb3JnYW5pc2F0aW9uKSAlPiUgDQogIHN1bW1hcmlzZShyZWFjaGVkID0gc3VtKHRvdGFsX3JlYWNoZWRbYWN0aXZpdHlfc3RhdHVzID09ICJDb21wbGV0ZWQiXSwgbmEucm0gPSBUUlVFKSwgDQogICAgICAgICAgICBhY3Rpdml0aWVzID0gbl9kaXN0aW5jdChpbmRpY2F0b3Jfc2hvcnQpKSAlPiUgDQogIHNlbGVjdChjb3VudHksIGltcGxlbWVudGluZ19wYXJ0bmVyLCBsZWFkX29yZ2FuaXNhdGlvbiwgcmVhY2hlZCwgYCNhY3Rpdml0aWVzYCA9IGFjdGl2aXRpZXMsIGFkbTFfcGNvZGUpICU+JSANCiAgd3JpdGVfY3N2KCIuL2RhdGEvYnJlYWtkb3duX2J5X2NvdW50eV9wYXJ0bmVyLmNzdiIpDQpgYGANCiANCg0KRG93bmxvYWQgdGhlIGRhdGFzZXQgZnJvbSB0aGUgdGFibGUgYmVsb3cgW2hlcmVdKGh0dHBzOi8vZ2l0aHViLmNvbS9rZW55YS1laWUtd2cvZWllX3dnXzV3cy9ibG9iL21haW4vZGF0YS9icmVha2Rvd25fYnlfY291bnR5X3BhcnRuZXIuY3N2KS4gDQoNCjxicj4NCg0KYGBge3J9DQplaWUgJT4lDQogIG11dGF0ZV9hdCh2YXJzKGltcGxlbWVudGluZ19wYXJ0bmVyLCBsZWFkX29yZ2FuaXNhdGlvbiksIH4gDQogICAgICAgICAgICAgIHN0cl9zdWIoLiwgZW5kID0gNTBMKSkgJT4lICANCiAgZ3JvdXBfYnkoY291bnR5LCBhZG0xX3Bjb2RlLCBpbXBsZW1lbnRpbmdfcGFydG5lciwgbGVhZF9vcmdhbmlzYXRpb24pICU+JSANCiAgc3VtbWFyaXNlKHJlYWNoZWQgPSBzdW0oc2VjdG9yX3JlYWNoZWRbYWN0aXZpdHlfc3RhdHVzID09ICJDb21wbGV0ZWQiXSwgbmEucm0gPSBUUlVFKSwgDQogICAgICAgICAgICBhY3Rpdml0aWVzID0gbl9kaXN0aW5jdChpbmRpY2F0b3Jfc2hvcnQpKSAlPiUgDQogIGxlZnRfam9pbihwYXJ0bmVyX2xpc3RfY291bnRpZXMgJT4lIA0KICAgICAgICAgICAgICBkaXN0aW5jdChwYXJ0bmVyLCBhY3JvbnltKSwgDQogICAgICAgICAgICBieSA9IGMoImltcGxlbWVudGluZ19wYXJ0bmVyIiA9ICJwYXJ0bmVyIikpICU+JSANCiAgc2VsZWN0KGNvdW50eSwgbGVhZF9vcmdhbmlzYXRpb24sIGltcGxlbWVudGluZ19wYXJ0bmVyLCBhY3JvbnltLCByZWFjaGVkLCBgI2FjdGl2aXRpZXNgID0gYWN0aXZpdGllcywgYWRtMV9wY29kZSkgJT4lIA0KICBzZWxlY3RfYWxsKC4sIH4gc3RyX3RvX3RpdGxlKC4pKSAlPiUgDQogIGRhdGF0YWJsZShvcHRpb25zID0gbGlzdChwYWdlTGVuZ3RoID0gMTAsIHNjcm9sbFggPSBUUlVFKSwgDQogICAgICAgICAgICBmaWx0ZXIgPSBsaXN0KHBvc2l0aW9uID0gInRvcCIsIGNsZWFyID0gRkFMU0UpLA0KICAgICAgICAgICAgY2FwdGlvbiA9IGh0bWx0b29sczo6dGFncyRjYXB0aW9uKHN0eWxlID0gJ2NhcHRpb24tc2lkZTogdG9wOyANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsgZm9udC1zaXplOjEyMCUgOycsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQnJlYWtkb3duIGJ5IGNvdW50eSBhbmQgcGFydG5lciIpKSAlPiUgDQogIGZvcm1hdFN0eWxlKDAsIHRhcmdldCA9ICJyb3ciLCBsaW5lSGVpZ2h0ID0gIjgwJSIsIGZvbnRTaXplID0gIjgwJSIpICU+JSANCiAgZm9ybWF0Q3VycmVuY3koYygiUmVhY2hlZCIpLCANCiAgICAgICAgICAgICAgICAgY3VycmVuY3kgPSAiIiwgaW50ZXJ2YWwgPSAzLCBtYXJrID0gIiwiKSAlPiUgDQogIGZvcm1hdFJvdW5kKGMoIlJlYWNoZWQiKSwgZGlnaXRzID0gMCkNCg0KYGBgDQoNCg0KPGJyPjxicj48YnI+DQoNCiMjIDMuMiBTdW1tYXJ5IGJ5IGltcGxlbWVudGluZyBwYXJ0bmVyDQoNCg0KVGhlIHRhYmxlIGJlbG93IGJyZWFrcyBkb3duIHBlcnNvbnMgcmVhY2hlZCBieSBwYXJ0bmVyLiANCg0KPGJyPg0KDQoNCmBgYHtyfQ0KZWllICU+JSANCiAgZmlsdGVyKGFjdGl2aXR5X3N0YXR1cyA9PSAiQ29tcGxldGVkIikgJT4lIA0KICBtdXRhdGUoaW1wbGVtZW50aW5nX3BhcnRuZXIgPSBzdHJfc3ViKGltcGxlbWVudGluZ19wYXJ0bmVyLCBlbmQgPSA1MEwpKSAlPiUgDQogIGdyb3VwX2J5KGltcGxlbWVudGluZ19wYXJ0bmVyKSAlPiUgDQogIHN1bW1hcmlzZShyZWFjaGVkID0gc3VtKHRvdGFsX3JlYWNoZWQsIG5hLnJtID0gVFJVRSksIA0KICAgICAgICAgICAgY291bnRpZXMgPSBuX2Rpc3RpbmN0KGFkbTFfcGNvZGUpLCANCiAgICAgICAgICAgIGFjdGl2aXRpZXMgPSBuX2Rpc3RpbmN0KGluZGljYXRvcl9zaG9ydCkpICU+JSANCiAgZmlsdGVyKHJlYWNoZWQgPiAwKSAlPiUgDQogIG11dGF0ZShgJXRvdGFsYCA9IHJvdW5kKHJlYWNoZWQgLyBzdW0ocmVhY2hlZCkgKiAxMDAsIGRpZ2l0cyA9IDIpKSAlPiUgDQogIGFycmFuZ2UoZGVzYyhyZWFjaGVkKSkgJT4lIA0KICBmbGV4dGFibGUoKSAlPiUgDQogIHRoZW1lX3plYnJhKCkgJT4lIA0KICBzZXRfY2FwdGlvbigiU3VtbWFyeSBieSBpbXBsZW1lbnRpbmcgcGFydG5lciIpICU+JSANCiAgc2V0X3RhYmxlX3Byb3BlcnRpZXMobGF5b3V0ID0gImF1dG9maXQiLCB3aWR0aCA9IC45KSAlPiUgDQogIGZvb3Rub3RlKGkgPSAxLCBqID0gMiwgcmVmX3N5bWJvbHMgPSAiMSIsIHBhcnQgPSAiaGVhZGVyIiwNCiAgICAgICAgICAgYXNfcGFyYWdyYXBoKCJBbGwgaW5kaWNhdG9ycyBhcyBvcHBvc2VkIG9ubHkgaW5kaWNhdG9ycyAxLCAyLCA1IGFuZCA2IikpICU+JSANCiAgZm9vdG5vdGUoaSA9IDEsIGogPSA1LCByZWZfc3ltYm9scyA9ICIyIiwgcGFydCA9ICJoZWFkZXIiLA0KICAgICAgICAgICBhc19wYXJhZ3JhcGgoIlBlcmNlbnRhZ2Ugb2YgcmVhY2hlZCBmb3IgYWxsIGluZGljYXRvcnMiKSkNCg0KDQpgYGANCg0KDQo8YnI+PGJyPjxicj4NCg0KDQojIDQuIFNjaG9vbHMgYW5kIGVkdWNhdGlvbiBsZXZlbA0KDQojIyA0LjEgU2Nob29scw0KDQpUaGUgbnVtYmVyIG9mIHNjaG9vbHMgcmVhY2hlZCBieSBzY2hvb2wgZmVlZGluZyBwcm9ncmFtbWVzIGFuZCBXQVNIIGluIHNjaG9vbHMgaW50ZXJ2ZW50aW9ucyB0by1kYXRlIGFyZTogDQoNCjxicj4NCg0KYGBge3J9DQplaWUgJT4lIA0KICBmaWx0ZXIoYWN0aXZpdHlfc3RhdHVzID09ICJDb21wbGV0ZWQiKSAlPiUgDQogIGZpbHRlcighaXMubmEoc2Nob29scykpICU+JQ0KICBtdXRhdGUoZGF0ZSA9IG5hbWVfdG9fZGF0ZShtb250aCkpICU+JSANCiAgZmlsdGVyKHN0cl9kZXRlY3QoaW5kaWNhdG9yX3Nob3J0LCAiMnw0IikpICU+JSANCiAgZ3JvdXBfYnkoaW5kaWNhdG9yX3Nob3J0LCBkYXRlKSAlPiUgDQogIHN1bW1hcmlzZShzY2hvb2xzID0gc3VtKHNjaG9vbHMpLCANCiAgICAgICAgICAgIHJlYWNoZWQgPSBzdW0odG90YWxfcmVhY2hlZCkpICU+JSANCiAgYXJyYW5nZShkYXRlKSAlPiUgDQogIG11dGF0ZShjdW1fc2Nob29scyA9IGN1bXN1bShzY2hvb2xzKSkgJT4lIA0KICBhcnJhbmdlKGluZGljYXRvcl9zaG9ydCkgJT4lIA0KICBnZ3Bsb3QoYWVzKHggPSBkYXRlLCB5ID0gY3VtX3NjaG9vbHMpLCANCiAgICAgICAgIHZqdXN0ID0gLS41KSArIA0KICBzY2FsZV94X2RhdGUoZGF0ZV9icmVha3MgPSAiMSBtb250aCIsIGRhdGVfbGFiZWxzID0gIiViIikgKyANCiAgZ2VvbV9saW5lKHNpemUgPSAxLjcsIA0KICAgICAgICAgICAgYWVzKGNvbG91ciA9IGluZGljYXRvcl9zaG9ydCkpICsgDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBjb21tYShjdW1fc2Nob29scykpLCB2anVzdCA9IC0uNSkgKw0KICBzY2FsZV9jb2xvdXJfbWFudWFsKHZhbHVlcyA9IGMoIiMzMTY4OGUiLCAiI2Q4NTc2YiIpKSArDQogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKSArIA0KICBsYWJzKHggPSAiIiwgDQogICAgICAgeSA9ICJDdW11bGF0aXZlIG51bWJlciBvZiBzY2hvb2xzIHJlYWNoZWQiLCANCiAgICAgICB0aXRsZSA9ICJTY2hvb2xzIHJlYWNoZWQgYnkgZmVlZGluZyBwcm9ncmFtbWVzIGFuZCBXQVNIIGluIHNjaG9vbHMiLCANCiAgICAgICBjb2xvdXIgPSAiSW5kaWNhdG9yIikNCg0KDQpgYGANCg0KPGJyPg0KDQpIb3dldmVyLCByZXBvcnRpbmcgdGhlIG92ZXJhbGwgbnVtYmVyIG9mIHNjaG9vbHMgcmVhY2hlZCBieSBhbGwgRWlFIGludGVydmVudGlvbnMgaXMgbXVjaCBtb3JlIGNoYWxsZW5naW5nLg0KDQpXaGlsc3QgYWxsIHBhcnRuZXJzIHdvcmtpbmcgb24gaW5kaWNhdG9ycyAyIGFuZCA0IHN1Ym1pdHRlZCB0aGUgbnVtYmVyIG9mIHNjaG9vbHMgdGhleSB3ZXJlIHdvcmtpbmcgaW4sIHRoZSBzYW1lIGlzIG5vdCB0cnVlIGZvciB0aGUgb3RoZXIgaW5kaWNhdG9ycy4gT25seSBpbmRpY2F0b3JzIDIgYW5kIDQgcmVxdWlyZSB0aGUgcmVwb3J0aW5nIG9mIHRoZSBudW1iZXIgb2Ygc2Nob29scy4gDQoNCg0KDQo8YnI+PGJyPjxicj4NCg0KDQojIyA0LjIgRWR1Y2F0aW9uIGxldmVsIA0KDQpUaGUgZGF0YSBjb2xsZWN0ZWQgb24gZWR1Y2F0aW9uIGxldmVsIGlzIG11ZGRsZWQ6IHRoZSBjb21iaW5hdGlvbiBvZiB2YXJpb3VzIGNhdGVnb3JpZXMgKHN1Y2ggYXMgYEVDRSAmIFByaW1hcnlgIGFuZCBgQWxsIEJhc2ljIEVkdWNhdGlvbmApIGhhbXBlcnMgYSBjbGVhbiBicmVha2Rvd24gYnkgZWR1Y2F0aW9uIGxldmVsOiANCg0KPGJyPg0KDQpgYGB7cn0NCmVpZSAlPiUgDQogIG11dGF0ZV9hdCh2YXJzKGdpcmxzLCBib3lzLCBtZW4sIHdvbWVuKSwgfiByZXBsYWNlX25hKC4sIDApKSAlPiUgDQogIGZpbHRlcighaXMubmEoZWR1Y2F0aW9uX2xldmVsKSkgJT4lIA0KICBtdXRhdGUoY2hpbGRyZW4gPSBib3lzICsgZ2lybHMpICU+JSANCiAgZ3JvdXBfYnkoZWR1Y2F0aW9uX2xldmVsKSAlPiUgDQogIHN1bW1hcmlzZShjaGlsZHJlbiA9IHN1bShjaGlsZHJlbikpICU+JSANCiAgYXJyYW5nZShkZXNjKGNoaWxkcmVuKSkgJT4lIA0KICBtdXRhdGUoYCVfb2ZfdG90YWxgID0gcm91bmQoY2hpbGRyZW4gLyBzdW0oY2hpbGRyZW4pICogMTAwLCBkaWdpdHMgPSAyKSkgJT4lIA0KICBmbGV4dGFibGUoKSAlPiUgDQogIHRoZW1lX3plYnJhKCkgJT4lIA0KICBzZXRfY2FwdGlvbigiQ2hpbGRyZW4gcmVhY2hlZCBieSBlZHVjYXRpb24gbGV2ZWwiKSAlPiUgDQogIHNldF90YWJsZV9wcm9wZXJ0aWVzKGxheW91dCA9ICJhdXRvZml0Iiwgd2lkdGggPSAuNikNCmBgYA0KDQo8YnI+DQoNCkZvciBpbnN0YW5jZSwgaXQgaXMgbm90IHBvc3NpYmxlIHRvIGNhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIGNoaWxkcmVuIHNlcnZlZCBmcm9tIHByaW1hcnktbGV2ZWwgaW5zdGl0dXRpb25zLiANCg0KVG8gdW5kZXJzdGFuZCByZXBvcnRpbmcgYXJvdW5kIHRoZSBtaXNtYXRjaCBvZiBlZHVjYXRpb24tbGV2ZWwgY2F0ZWdvcmllcywgbGV0IHVzIGV4YW1pbmUgaW5kaXZpZHVhbCBpbmRpY2F0b3JzLiBJbiB0aGUgcGxvdCBiZWxvdywgY2hpbGRyZW4gcmVhY2hlZCBoYXZlIGJlZW4gYnJva2VuIGRvd24gYnkgZWR1Y2F0aW9uIGxldmVsIGFuZCBieSBpbmRpY2F0b3IuIFRoZSBjYXRlZ29yeSBgQWxsIEJhc2ljIEVkdWNhdGlvbmAsIHdoaWxzdCBwcmVzZW50IGluIGFsbCBvZiB0aGUgaW5kaWNhdG9ycywgaXMgbW9zdCBoZWF2aWx5IHVzZWQgaW4gdGhlIFdBU0gtaW4tc2Nob29scyBpbnRlcnZlbnRpb24uIEFkZGl0aW9uYWxseSwgdGhpcyBpbmRpY2F0b3IgaXMgdXNlZCBieSA1IGRpZmZlcmVudCBpbXBsZW1lbnRpbmcgcGFydG5lcnMuIA0KDQo8YnI+DQoNCmBgYHtyfQ0KDQoNCmVpZSAlPiUgDQogIG11dGF0ZV9hdCh2YXJzKGdpcmxzLCBib3lzLCBtZW4sIHdvbWVuKSwgfiByZXBsYWNlX25hKC4sIDApKSAlPiUgDQogIGZpbHRlcighaXMubmEoZWR1Y2F0aW9uX2xldmVsKSkgJT4lIA0KICBtdXRhdGUocmVhY2hlZCA9IGJveXMgKyBnaXJscyArIG1lbiArIHdvbWVuKSAlPiUgDQogIGdyb3VwX2J5KGVkdWNhdGlvbl9sZXZlbCwgaW5kaWNhdG9yX3Nob3J0KSAlPiUNCiAgc3VtbWFyaXNlKHJlYWNoZWQgPSBzdW0ocmVhY2hlZCwgbmEucm0gPSBUUlVFKSkgJT4lDQogIGdyb3VwX2J5KGluZGljYXRvcl9zaG9ydCkgJT4lIA0KICBtdXRhdGUodG90YWwgPSBzdW0ocmVhY2hlZCkpICU+JSAgDQogIHVuZ3JvdXAoKSAlPiUgDQogIG11dGF0ZShwYyA9IHJlYWNoZWQgLyB0b3RhbCwgDQogICAgICAgICBpbmRpY2F0b3Jfc2hvcnQgPSBmY3RfcmV2KGluZGljYXRvcl9zaG9ydCkpICU+JSANCiAgZ2dwbG90KGFlcyh4ID0gcGMsIHkgPSBpbmRpY2F0b3Jfc2hvcnQsIGZpbGwgPSBlZHVjYXRpb25fbGV2ZWwpKSArIA0KICBnZW9tX2NvbCgpICsgDQogIGdlb21fdGV4dChhZXMoeCA9IHBjLCANCiAgICAgICAgICAgICAgICB5ID0gaW5kaWNhdG9yX3Nob3J0LCANCiAgICAgICAgICAgICAgICBsYWJlbCA9IHBlcmNlbnQocGMsIGFjY3VyYWN5ID0gMSkpLA0KICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9zdGFjayh2anVzdCA9IC41KSwgDQogICAgICAgICAgICBjb2xvdXIgPSAid2hpdGUiKSArDQogIHNjYWxlX2ZpbGxfdmlyaWRpc19kKG9wdGlvbiA9ICJwbGFzbWEiKSArDQogIHNjYWxlX3hfY29udGludW91cyhsYWJlbHMgPSBwZXJjZW50KSArIA0KICBsYWJzKHggPSAiIiwgDQogICAgICAgeSA9ICIiLCANCiAgICAgICB0aXRsZSA9ICJFZHVjYXRpb24tbGV2ZWwgYnJlYWtkb3duIGJ5IGluZGljYXRvciIsIA0KICAgICAgIGZpbGwgPSAiIikgKyANCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gInRvcCIpDQogIA0KYGBgDQoNCjxicj48YnI+PGJyPg0KDQoNCg0KDQoNCg0KIyA1LiBSZWZlcmVuY2UgbWFwcyBhbmQgdGFibGVzIA0KDQojIyA1LjEgUmVmZXJlbmNlIG1hcHMgDQoNCklQQyBkYXRhIGV4dHJhY3RlZCBmcm9tIFtoZXJlXShodHRwczovL3d3dy5pcGNpbmZvLm9yZy9pcGMtY291bnRyeS1hbmFseXNpcy9kZXRhaWxzLW1hcC9lbi9jLzExNTYyMTAvP2lzbzM9S0VOKS4gDQoNCmBgYHtyIGZpZy53aWR0aD0xMiwgZmlnLmhlaWdodD0xMH0NCmlwYyAlPiUgDQogIHJpZ2h0X2pvaW4ocGNvZGUxX3NoYXBlLCANCiAgICAgICAgICAgICBieSA9ICJhZG0xX3Bjb2RlIikgJT4lIA0KICBzdF9hc19zZigpICU+JSANCiAgZ2dwbG90KCkgKyANCiAgZ2VvbV9zZihzaXplID0gLjAxLCBjb2xvdXIgPSAiZ3JleTcwIiwgDQogICAgICAgICAgYWVzKGZpbGwgPSBudW1iZXJfcGhhc2VfcDMpKSArIA0KICBnZW9tX3NmX3RleHQoYWVzKGxhYmVsID0gY29tbWEobnVtYmVyX3BoYXNlX3AzKSksIA0KICAgICAgICAgICAgICAgY29sb3VyID0gImdyZXk0NSIsIA0KICAgICAgICAgICAgICAgc2l6ZSA9IDIpICsgDQogIHNjYWxlX2ZpbGxfdmlyaWRpc19jKGxhYmVscyA9IGNvbW1hLCANCiAgICAgICAgICAgICAgICAgICAgICAgbmEudmFsdWUgPSAiZ3JleTgwIiwgDQogICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbiA9ICJpbmZlcm5vIiwgYmVnaW4gPSAuNCwgLCBkaXJlY3Rpb24gPSAtMSkgKyANCiAgdGhlbWVfdm9pZCgpICsgDQogIGxhYnMoZmlsbCA9ICJBdCBsZWFzdFxucGhhc2UgMyIsIA0KICAgICAgIHRpdGxlID0gIk51bWJlciBvZiBwZXJzb25zIElQQyBQaGFzZSAzIG9yIGFib3ZlIiwgDQogICAgICAgc3VidGl0bGUgPSAiU291cmNlOiBodHRwczovL3d3dy5pcGNpbmZvLm9yZy8iKSArIA0KDQppcGMgJT4lIA0KICByaWdodF9qb2luKHBjb2RlMV9zaGFwZSwgDQogICAgICAgICAgICAgYnkgPSAiYWRtMV9wY29kZSIpICU+JSANCiAgc3RfYXNfc2YoKSAlPiUgDQogIGdncGxvdCgpICsgDQogIGdlb21fc2Yoc2l6ZSA9IC4wMSwgY29sb3VyID0gImdyZXk3MCIsIA0KICAgICAgICAgIGFlcyhmaWxsID0gcGVyY2VudF9waGFzZV9wMykpICsgDQogIGdlb21fc2ZfdGV4dChhZXMobGFiZWwgPSBwZXJjZW50KHBlcmNlbnRfcGhhc2VfcDMpKSwgDQogICAgICAgICAgICAgICBjb2xvdXIgPSAiZ3JleTQ1IiwgDQogICAgICAgICAgICAgICBzaXplID0gMikgKyANCiAgc2NhbGVfZmlsbF92aXJpZGlzX2MobGFiZWxzID0gcGVyY2VudCwgDQogICAgICAgICAgICAgICAgICAgICAgIG5hLnZhbHVlID0gImdyZXk4MCIsIA0KICAgICAgICAgICAgICAgICAgICAgICBvcHRpb24gPSAiaW5mZXJubyIsIGJlZ2luID0gLjQsICwgZGlyZWN0aW9uID0gLTEpICsgDQogIHRoZW1lX3ZvaWQoKSArIA0KICBsYWJzKGZpbGwgPSAiJSBJUEMgcGhhc2UgMyIsIA0KICAgICAgIHRpdGxlID0gIlBlcmNlbnRhZ2Ugb2YgcG9wdWxhdGlvbiBJUEMgUGhhc2UgMyBvciBhYm92ZSIsIA0KICAgICAgIHN1YnRpdGxlID0gIlNvdXJjZTogaHR0cHM6Ly93d3cuaXBjaW5mby5vcmcvIikgKw0KDQoNCmVpZSAlPiUgDQogIGZpbHRlcihhY3Rpdml0eV9zdGF0dXMgPT0gIkNvbXBsZXRlZCIpICU+JSANCiAgZ3JvdXBfYnkoYWRtMV9wY29kZSkgJT4lIA0KICBzdW1tYXJpc2Uoc2VjdG9yX3JlYWNoZWQgPSBzdW0oc2VjdG9yX3JlYWNoZWQsIG5hLnJtID0gVFJVRSkpICU+JSANCiAgZmlsdGVyKHNlY3Rvcl9yZWFjaGVkID4gMCkgJT4lIA0KICByaWdodF9qb2luKHBjb2RlMV9zaGFwZSwgDQogICAgICAgICAgICAgYnkgPSAiYWRtMV9wY29kZSIpICU+JSANCiAgc3RfYXNfc2YoKSAlPiUgDQogIGdncGxvdCgpICsgDQogIGdlb21fc2Yoc2l6ZSA9IC4wMSwgY29sb3VyID0gImdyZXk3MCIsIA0KICAgICAgICAgIGFlcyhmaWxsID0gc2VjdG9yX3JlYWNoZWQpKSArIA0KICBnZW9tX3NmX3RleHQoYWVzKGxhYmVsID0gY29tbWEoc2VjdG9yX3JlYWNoZWQpKSwgDQogICAgICAgICAgICAgICBjb2xvdXIgPSAiZ3JleTQ1IiwgDQogICAgICAgICAgICAgICBzaXplID0gMikgKyANCiAgc2NhbGVfZmlsbF92aXJpZGlzKGxhYmVscyA9IGNvbW1hLCANCiAgICAgICAgICAgICAgICAgICAgICAgbmEudmFsdWUgPSAiZ3JleTgwIiwgDQogICAgICAgICAgICAgICAgICAgICBvcHRpb24gPSAibWFrbyIsIA0KICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gLTEsIA0KICAgICAgICAgICAgICAgICAgICAgYmVnaW4gPSAuMiwNCiAgICAgICAgICAgICAgICAgICAgIHRyYW5zID0gImxvZyIsIA0KICAgICAgICAgICAgICAgICAgICAgYnJlYWtzID0gYygwLCAxMDAsIDEwMDAsIDEwMDAwLCAxMDAwMDAsIDMzOTQ4MykpICsgDQogIHRoZW1lX3ZvaWQoKSArIA0KICBsYWJzKGZpbGwgPSAiU2VjdG9yXG5yZWFjaGVkIiwgDQogICAgICAgdGl0bGUgPSAiUGVyc29ucyByZWFjaGVkIGJ5IHRoZSBFZHVjYXRpb24gU2VjdG9yIikgKyANCiAgDQplaWUgJT4lIA0KICBmaWx0ZXIoYWN0aXZpdHlfc3RhdHVzID09ICJDb21wbGV0ZWQiKSAlPiUgDQogIGdyb3VwX2J5KGFkbTFfcGNvZGUpICU+JSANCiAgc3VtbWFyaXNlKHJlYWNoZWQgPSBzdW0oc2VjdG9yX3JlYWNoZWQsIG5hLnJtID0gVFJVRSkpICU+JSANCiAgZnVsbF9qb2luKHRhcmdldHMgJT4lIA0KICAgICAgICAgICAgICBmaWx0ZXIodGFyZ2V0X3VuaXQgPT0gInBlb3BsZSIpICU+JQ0KICAgICAgICAgICAgICBkaXN0aW5jdChhZG0xX3Bjb2RlLCB0YXJnZXQgPSBjb3VudHlfb3ZlcmFsbF90YXJnZXQpKSAlPiUgDQogIHJlcGxhY2VfbmEobGlzdChyZWFjaGVkID0gMCwgdGFyZ2V0ID0gMCkpICU+JSANCiAgbXV0YXRlKHBjID0gaWZlbHNlKHRhcmdldCA9PSAwLCAwLCByZWFjaGVkIC8gdGFyZ2V0KSkgJT4lIA0KICByaWdodF9qb2luKHBjb2RlMV9zaGFwZSwgDQogICAgICAgICAgICAgYnkgPSAiYWRtMV9wY29kZSIpICU+JSANCiAgc3RfYXNfc2YoKSAlPiUgDQogIGdncGxvdCgpICsNCiAgZ2VvbV9zZihzaXplID0gLjAxLCBjb2xvdXIgPSAiZ3JleTcwIiwgDQogICAgICAgICAgYWVzKGZpbGwgPSBwYykpICsgDQogIGdlb21fc2ZfdGV4dChhZXMobGFiZWwgPSBwZXJjZW50KHBjLCBhY2N1cmFjeSA9IDEpKSwgDQogICAgICAgICAgICAgICBjb2xvdXIgPSAiZ3JleTQ1IiwgDQogICAgICAgICAgICAgICBzaXplID0gMikgKyANCiAgc2NhbGVfZmlsbF92aXJpZGlzKGxhYmVscyA9IHBlcmNlbnQsIA0KICAgICAgICAgICAgICAgICAgICAgICBuYS52YWx1ZSA9ICJncmV5ODAiLA0KICAgICAgICAgICAgICAgICAgICAgb3B0aW9uID0gIm1ha28iLCANCiAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9IC0xLA0KICAgICAgICAgICAgICAgICAgICAgYmVnaW4gPSAuMikgKyANCiAgdGhlbWVfdm9pZCgpICsgDQogIGxhYnMoZmlsbCA9ICIlIG9mIHRhcmdldCIsIA0KICAgICAgIHRpdGxlID0gIlBlcmNlbnRhZ2Ugb2YgRWlFIGNvdW50eSB0YXJnZXQgcmVhY2hlZCIpICsgICANCg0KcGxvdF9sYXlvdXQobmNvbCA9IDIsIA0KICAgICAgICAgICAgbnJvdyA9IDIpDQogIA0KYGBgDQoNCjxicj48YnI+PGJyPg0KDQoNCiMjIDUuMiBSZWZlcmVuY2UgdGFibGUgDQoNCkRvd25sb2FkIHRoZSBFaUUgNVdzIGRhdGEgW2hlcmVdKGh0dHBzOi8vZ2l0aHViLmNvbS9rZW55YS1laWUtd2cvZWllX3dnXzV3cy9ibG9iL21haW4vZGF0YS9laWVfNXdzLmNzdikNCg0KQXMgYSByZWZyZXNoZXIgZm9yIHRoZSByZWZlcmVuY2UgdGFibGUgYmVsb3csIHRoZSBpbmRpY2F0b3JzIGFyZTogDQoNCjxicj4NCg0KYGBge3J9DQplaWUgJT4lIA0KICBkaXN0aW5jdChpbmRpY2F0b3IpICU+JSANCiAgYXJyYW5nZShpbmRpY2F0b3IpICU+JSANCiAgZmxleHRhYmxlKCkgJT4lIA0KICB0aGVtZV96ZWJyYSgpICU+JSANCiAgc2V0X3RhYmxlX3Byb3BlcnRpZXMod2lkdGggPSAuODUsIGxheW91dCA9ICJhdXRvZml0IikgJT4lIA0KICBmb250c2l6ZShpID0gMTo2LCBqID0gMSwgc2l6ZSA9IDkpIA0KDQpgYGANCg0KPGJyPg0KDQoNCmBgYHtyfQ0KZWllICU+JQ0KICBtdXRhdGUoaW1wbGVtZW50aW5nX3BhcnRuZXIgPSBzdHJfc3ViKGltcGxlbWVudGluZ19wYXJ0bmVyLCBlbmQgPSA1MEwpLCANCiAgICAgICAgIGluZGljYXRvcl9udW1iZXIgPSBwYXJzZV9udW1iZXIoaW5kaWNhdG9yX3Nob3J0KSkgJT4lDQogIGdyb3VwX2J5KGNvdW50eSwgYWRtMV9wY29kZSwgaW1wbGVtZW50aW5nX3BhcnRuZXIsIGluZGljYXRvcl9udW1iZXIpICU+JSANCiAgc3VtbWFyaXNlKHJlYWNoZWQgPSBzdW0odG90YWxfcmVhY2hlZCwgbmEucm0gPSBUUlVFKSkgJT4lIA0KICBzZWxlY3QoY291bnR5LCBpbXBsZW1lbnRpbmdfcGFydG5lciwgaW5kaWNhdG9yID0gaW5kaWNhdG9yX251bWJlciwgcmVhY2hlZCwgYWRtMV9wY29kZSkgJT4lIA0KICBkYXRhdGFibGUob3B0aW9ucyA9IGxpc3QocGFnZUxlbmd0aCA9IDEwLCBzY3JvbGxYID0gVFJVRSksIA0KICAgICAgICAgICAgZmlsdGVyID0gbGlzdChwb3NpdGlvbiA9ICJ0b3AiLCBjbGVhciA9IEZBTFNFKSwNCiAgICAgICAgICAgIGNhcHRpb24gPSBodG1sdG9vbHM6OnRhZ3MkY2FwdGlvbihzdHlsZSA9ICdjYXB0aW9uLXNpZGU6IHRvcDsgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IGZvbnQtc2l6ZToxMjAlIDsnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJyZWFrZG93biBieSBpbmRpY2F0b3IsIGNvdW50eSBhbmQgaW1wbGVtZW50aW5nIHBhcnRuZXIiKSkgJT4lIA0KICBmb3JtYXRTdHlsZSgwLCB0YXJnZXQgPSAicm93IiwgbGluZUhlaWdodCA9ICI4MCUiLCBmb250U2l6ZSA9ICI4MCUiKSAlPiUgDQogIGZvcm1hdEN1cnJlbmN5KGMoInJlYWNoZWQiKSwgDQogICAgICAgICAgICAgICAgIGN1cnJlbmN5ID0gIiIsIGludGVydmFsID0gMywgbWFyayA9ICIsIikgJT4lIA0KICBmb3JtYXRSb3VuZChjKCJyZWFjaGVkIiksIGRpZ2l0cyA9IDApDQpgYGANCg0KPGJyPjxicj48YnI+DQoNCiMjIDUuMyBSZXBvcnRpbmcgcXVhbGl0eSANCg0KIyMjIDUuMy4xIFN1Yi1jb3VudGllcyANCg0KYGBge3J9DQpyZWFkX2NzdigiLi9kYXRhL2VpZV81d3NfMjAyMzA3MjQuY3N2IikgJT4lIA0KICBmaWx0ZXIoYWN0aXZpdHlfc3RhdHVzID09ICJDb21wbGV0ZWQiKSAlPiUgDQogIGZpbHRlcighaXMubmEoc3ViX2NvdW50eSkpICU+JQ0KICBzbGljZSgxNToyMCkgJT4lIA0KICBzZWxlY3QoY291bnR5LCBzdWJfY291bnR5LCB0b3RhbF9yZWFjaGVkKSAlPiUgDQogIHNlbGVjdF9hbGwofiBzdHJfdG9fdGl0bGUoLikpICU+JSANCiAgZmxleHRhYmxlKCkgJT4lIA0KICB0aGVtZV96ZWJyYSgpICU+JSANCiAgc2V0X2NhcHRpb24oIkZvciBzZXZlcmFsIGVudHJpZXMsIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgc3ViLWNvdW50eSBwZXIgcm93IikgJT4lIA0KICBzZXRfdGFibGVfcHJvcGVydGllcyhsYXlvdXQgPSAiYXV0b2ZpdCIsIHdpZHRoID0gLjcpDQoNCmBgYA0KDQo8YnI+DQoNCldpdGggcmVmZXJlbmNlIHRvIHRoZSBleHRyYWN0IGZyb20gdGhlIDVXcyBhYm92ZSwgYW5hbHlzaXMgYW5kIHJlcG9ydGluZyBpcyBhdCB0aGUgc3ViLWNvdW50eSBsZXZlbCBmb3IgdGhlIDg2JSBvZiBiZW5lZmljaWFyaWVzIHdobyB3ZXJlIHJlcG9ydGVkIHdpdGhvdXQgdGhpcyB0eXBlIG9mIGVycm9yLiBIb3dldmVyLCB1bnRpbCB0aGlzIGlzc3VlIGlzIHJlc29sdmVkLCBtYWtpbmcgYW55IHN1Yi1jb3VudHktbGV2ZWwgbWFwcyBvciBwcm9kdWN0cyB3aWxsIG5lY2Vzc2FyaWx5IGV4Y2x1ZGUgYSBzaXplYWJsZSBwb3J0aW9uIG9mIHRoZSBiZW5lZmljaWFyaWVzIHJlYWNoZWQuIA0KDQoNCjxicj4gDQoNCg0KDQpgYGB7cn0NCnJlYWRfY3N2KCIuL2RhdGEvZWllXzV3c18yMDIzMDcyNC5jc3YiKSAlPiUgDQogIGZpbHRlcihhY3Rpdml0eV9zdGF0dXMgPT0gIkNvbXBsZXRlZCIpICU+JSANCiAgbXV0YXRlKG9uZV9zdWJfY291bnR5ID0gaWZlbHNlKHN0cl9kZXRlY3Qoc3ViX2NvdW50eSwgIiwiKSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0UsIFRSVUUpKSAlPiUNCiAgZ3JvdXBfYnkob25lX3N1Yl9jb3VudHkpICU+JSANCiAgc3VtbWFyaXNlKHRvdGFsX3JlYWNoZWQgPSBzdW0odG90YWxfcmVhY2hlZCwgbmEucm0gPSBUUlVFKSkgJT4lIA0KICBtdXRhdGUoYCVfdG90YWxgID0gcm91bmQodG90YWxfcmVhY2hlZCAvIHN1bSh0b3RhbF9yZWFjaGVkKSAqIDEwMCwgZGlnaXRzID0gMiksIA0KICAgICAgICAgb25lX3N1Yl9jb3VudHkgPSBpZmVsc2UoaXMubmEob25lX3N1Yl9jb3VudHkpLCAiTkEiLCBvbmVfc3ViX2NvdW50eSksIA0KICAgICAgICAgb25lX3N1Yl9jb3VudHkgPSBmY3RfcmVsZXZlbChvbmVfc3ViX2NvdW50eSwgYygiVFJVRSIsICJGQUxTRSIsICJOQSIpKSkgJT4lDQogIGFycmFuZ2Uob25lX3N1Yl9jb3VudHkpICU+JSANCiAgc2VsZWN0X2FsbCh+IHN0cl90b190aXRsZSguKSkgJT4lIA0KICBmbGV4dGFibGUoKSAlPiUgDQogIHRoZW1lX3plYnJhKCkgJT4lIA0KICBzZXRfY2FwdGlvbigiODYlIG9mIGJlbmVmaWNpYXJpZXMgcmVwb3J0ZWQgd2l0aCBvbmUgc3ViLWNvdW50eSBwZXIgcm93IikgJT4lIA0KICBzZXRfdGFibGVfcHJvcGVydGllcyhsYXlvdXQgPSAiYXV0b2ZpdCIsIHdpZHRoID0gLjcpDQpgYGANCg0KPGJyPg0KDQpJbiB0aGUgcHJvcG9zZWQgcmV2aXNpb24gdG8gdGhlIDVXIHRlbXBsYXRlLCB0aGUgc3ViLWNvdW50eSBjb2x1bW4gaGFzIGJlZW4gcmV2aXNlZCB0byBiZSBhIGRyb3Bkb3duIGxpc3QgZGVwZW5kZW50IG9uIHRoZSBpbnB1dCBpbiB0aGUgYGNvdW50eWAgY29sdW1uLiBHb2luZyBmb3J3YXJkLCBvbmx5IG9uZSBzdWItY291bnR5IHNob3VsZCBiZSByZXBvcnRlZCBwZXIgcm93LiANCg0KPGJyPjxicj4NCg0KIyMjIDUuMy4yIFNjaG9vbHMNCg0KVGhlIG5leHQgc3RlcCBpcyB0byBtb3ZlIGZyb20gZW50ZXJpbmcgdGhlIG5hbWVzIG9mIHNjaG9vbHMgdG8ganVzdCBlbnRlcmluZyB0aGUgbnVtYmVyIG9mIHNjaG9vbHMgcGVyIGludGVydmVudGlvbi4gVGhlIGBzY2hvb2xzX3RleHRgIGNvbHVtbiBiZWxvdyBpcyBkYXRhIGVudGVyZWQgaW50byA1V3MgdGVtcGxhdGUuIFRoZSBjb2x1bW4gaXMgY3VycmVudGx5IGEgbWl4IG9mIG5hbWVzIG9mIHNjaG9vbHMgYW5kIG51bWJlciBvZiBzY2hvb2xzLiBJdCBpcyBiZXN0IHRvIGNvbGxlY3Qgb25seSB0aGUgbnVtYmVyIG9mIHNjaG9vbHMgYW5kIGhhdmUgdGhlIG5hbWVzIGJlIGluY2x1ZGVkIGluIHRoZSBjb21tZW50cy4gDQoNCjxicj4gDQoNCmBgYHtyfQ0KDQpyZWFkX2NzdigiLi9kYXRhL2VpZV81d3NfMjAyMzA3MjQuY3N2IikgJT4lIA0KICBmaWx0ZXIoIWlzLm5hKG5hbWVzX251bWJlcnNfc2Nob29scykpICU+JSANCiAgZmlsdGVyKGFjdGl2aXR5X3N0YXR1cyA9PSAiQ29tcGxldGVkIikgJT4lIA0KICBzbGljZSgxMSwgMTIsIDEzKSAlPiUgDQogIHNlbGVjdChTY2hvb2xzX3RleHQgPSBuYW1lc19udW1iZXJzX3NjaG9vbHMsIFNjaG9vbHNfbnVtYmVyID0gc2Nob29scykgJT4lIA0KICBmbGV4dGFibGUoKSAlPiUgDQogIHRoZW1lX3plYnJhKCkgJT4lIA0KICBzZXRfdGFibGVfcHJvcGVydGllcyhsYXlvdXQgPSAiYXV0b2ZpdCIsIHdpZHRoID0gLjcpICU+JSANCiAgc2V0X2NhcHRpb24oIlNjaG9vbHMgY29sdW1uIGlzIGEgbWl4IG9mIHRleHQgYW5kIG51bWJlcnMiKQ0KICANCg0KYGBgDQoNCg0KPGJyPiANCg0KSXQgaXMgc3RpbGwgdmFsdWFibGUgdG8gY29sbGVjdCBzY2hvb2wgbmFtZXMgYW5kIG1hdGNoIHRoZW0gdG8gdGhlIGxpc3Qgb2Ygc2Nob29sIGNvZGVzIGFuZCBnZW9jb29yZGluYXRlcywgZXNwZWNpYWxseSBmb3Igc2l0ZS1sZXZlbCBtb25pdG9yaW5nLCBidXQgdGhhdCBpcyBhIHN0ZXAgdG8gYmUgdGFrZW4gb25jZSB0aGUgZm9ybWF0IG9mIHNjaG9vbCBuYW1lcyBiZWluZyBjb2xsZWN0ZWQgaGFzIGJlZW4gc3RhbmRhcmRpc2VkLiANCg0KPGJyPjxicj4NCg0KIyMjIDUuMy4zIEVkdWNhdGlvbiBsZXZlbA0KDQpBcyByZXBvcnRlZCBpbiBhbiBlYXJsaWVyIHNlY3Rpb24gb2YgdGhlIGRvY3VtZW50LCBpdCBpcyBjdXJyZW50bHkgbm90IHBvc3NpYmxlIHRvIGhhdmUgYSBjbGVhbiBicmVha2Rvd24gb2YgYmVuZWZpY2lhcmllcyByZWFjaGVkIGJ5IGVkdWNhdGlvbiBsZXZlbDogDQoNCjxicj4NCg0KYGBge3J9DQplaWUgJT4lIA0KICBtdXRhdGVfYXQodmFycyhnaXJscywgYm95cywgbWVuLCB3b21lbiksIH4gcmVwbGFjZV9uYSguLCAwKSkgJT4lIA0KICBmaWx0ZXIoIWlzLm5hKGVkdWNhdGlvbl9sZXZlbCkpICU+JSANCiAgbXV0YXRlKGNoaWxkcmVuID0gYm95cyArIGdpcmxzKSAlPiUgDQogIGdyb3VwX2J5KGVkdWNhdGlvbl9sZXZlbCkgJT4lIA0KICBzdW1tYXJpc2UoY2hpbGRyZW4gPSBzdW0oY2hpbGRyZW4pKSAlPiUgDQogIGFycmFuZ2UoZGVzYyhjaGlsZHJlbikpICU+JSANCiAgbXV0YXRlKGAlX29mX3RvdGFsYCA9IHJvdW5kKGNoaWxkcmVuIC8gc3VtKGNoaWxkcmVuKSAqIDEwMCwgZGlnaXRzID0gMikpICU+JSANCiAgZmxleHRhYmxlKCkgJT4lIA0KICB0aGVtZV96ZWJyYSgpICU+JSANCiAgc2V0X2NhcHRpb24oIkNoaWxkcmVuIHJlYWNoZWQgYnkgZWR1Y2F0aW9uIGxldmVsIikgJT4lIA0KICBzZXRfdGFibGVfcHJvcGVydGllcyhsYXlvdXQgPSAiYXV0b2ZpdCIsIHdpZHRoID0gLjYpDQpgYGANCg0KDQo8YnI+DQoNCkluIHRoZSB1cGRhdGVkIHRlbXBsYXRlLCB0aGUgb3B0aW9ucyAgYEFsbCBCYXNpYyBFZHVjYXRpb25gIGFuZCBgUHJpbWFyeS9FQ0VgIGhhdmUgYmVlbiByZW1vdmVkIGFuZCBwYXJ0bmVycyBhcmUgcmVxdWVzdGVkIHRvIG9ubHkgc2VsZWN0IG9uZSBlZHVjYXRpb24gbGV2ZWwgcGVyIHJvdy4gDQoNCg0KDQoNCg0KDQoNCg0KDQo=